Abrufen der Struktur eines Pakets in Golang
Können wir alle in einem GoLang-Paket enthaltenen Strukturen als Liste von Namen oder Schnittstellen auflisten?
Zum Beispiel:
struct := list("fmt")
Erwartete Ausgabe:
Formatter GoStringer Scanner State Stringer
Der optimalste Ansatz besteht darin, den Go-Quellcode zu analysieren (der mit dem Befehl hg clone geklont werden kann https://code.google.com/p/go/), insbesondere das Extrahieren der ast.StructType-Instanzen.
Dieser Prozess wird in hübschen Druckern veranschaulicht:
func (P *Printer) Type(t *AST.Type) int { separator := semicolon; switch t.form { case AST.STRUCT, AST.INTERFACE: switch t.form { case AST.STRUCT: P.String(t.pos, "struct"); case AST.INTERFACE: P.String(t.pos, "interface"); } if t.list != nil { P.separator = blank; P.Fields(t.list, t.end); } separator = none;
In ähnlicher Weise , das go/lint-Tool führt eine ähnliche Funktion in lint.go aus:
case *ast.StructType: for _, f := range v.Fields.List { for _, id := range f.Names { check(id, "struct field") } }
Das obige ist der detaillierte Inhalt vonWie extrahiere ich die Struktur eines GoLang-Pakets?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!