Trotz Verwendung der Parser- und AST-Pakete von Go ist der bereitgestellte Code nicht in der Lage, die Dokumentationskommentare zu den Strukturtypen FirstType zu erkennen und SecondType.
The go/doc Die readType-Funktion des Pakets schlägt vor, dass, wenn eine TypeSpec keine zugehörige Dokumentation hat, die Dokumentation aus dem GenDecl abgerufen wird.
Um den AST zu überprüfen und dieses Problem zu beheben, wurden die folgenden Änderungen vorgenommen an den Code angepasst:
func main() { // ... for _, f := range d { ast.Inspect(f, func(n ast.Node) bool { switch x := n.(type) { // ... case *ast.GenDecl: fmt.Printf("%s:\tGenDecl %s\n", fset.Position(n.Pos()), x.Doc.Text()) } return true }) } }
Durch das Einfügen eines Falls für *ast.GenDecl gibt das Programm nun die verlorene Dokumentation für FirstType aus und SecondType.
Dieser Ansatz hat jedoch eine Einschränkung, wenn mehrere Strukturtypen in einer einzigen TypeSpec definiert sind:
// This documents FirstType and SecondType together type ( // FirstType docs FirstType struct { // FirstMember docs FirstMember string } // SecondType docs SecondType struct { // SecondMember docs SecondMember string } )
In diesem Fall ist die Dokumente werden sowohl mit der GenDecl als auch mit der Person verknüpft TypeSpecs.
Während die Verwendung des AST zum Parsen von Kommentaren möglich ist, ist es vorzuziehen, das Paket go/doc zu verwenden, um diese Aufgabe zu erledigen. Das Paket go/doc kann Dokumentationskommentare für verschiedene Go-Komponenten, einschließlich Strukturtypen, effektiv abrufen.
Das obige ist der detaillierte Inhalt vonWarum erkennen Go-Parser- und Ast-Pakete keine Dokumentkommentare zu Strukturtypen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!