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.
Die readType-Funktion des go/doc-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 am Code vorgenommen:
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 Einschließen eines Falls für *ast.GenDecl gibt das Programm jetzt Ausgaben aus die verlorene Dokumentation für FirstType und SecondType.
Dieser Ansatz weist jedoch eine Einschränkung auf, 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 werden die Dokumente sowohl mit der GenDecl als auch mit den einzelnen TypeSpecs verknüpft.
Während die Verwendung des AST zum Parsen von Kommentaren möglich ist, ist es vorzuziehen, dafür das Paket go/doc zu verwenden diese Aufgabe übernehmen. 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!