So erhalten Sie alle Strukturen innerhalb eines Pakets in Go
Innerhalb eines Go-Pakets ist es möglich, eine Liste aller Strukturen in zu erhalten Form ihrer Namen oder Schnittstellen. Dazu besteht der beste Ansatz darin, den Go-Quellcode zu analysieren und den ast.StructType gezielt zu isolieren.
Quellanalyse
Um den Quellcode zu analysieren, wird der Go Quellen können mit dem folgenden Befehl geklont werden:
hg clone https://code.google.com/p/go/
Sobald die Quellen verfügbar sind, können Sie den ast.StructType mit einem hübschen Drucker isolieren, wie im folgenden Codeausschnitt gezeigt:
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; } }
Alternative Methode
Ein weiterer Ansatz, den das go/lint-Tool verwendet, besteht darin, dieselbe Aufgabe in seiner lint.go-Datei auszuführen:
case *ast.StructType: for _, f := range v.Fields.List { for _, id := range f.Names { check(id, "struct field") } }
Durch Implementierung Mit diesem Ansatz können Sie eine Liste aller in einem bestimmten Paket definierten Strukturen erhalten.
Das obige ist der detaillierte Inhalt vonWie kann ich alle Strukturen innerhalb eines Go-Pakets abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!