尽管使用了 Go 的解析器和 ast 包,但提供的代码无法检测到结构类型 FirstType 上的文档注释
go/doc 包的 readType 函数建议当 TypeSpec 没有关联文档时,从 GenDecl 中检索文档。
为了检查 AST 并解决此问题,对代码进行了以下更改:
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 }) } }
通过包含 *ast.GenDecl 的情况,程序现在输出FirstType 和 SecondType 丢失的文档。
但是,当在单个 TypeSpec 中定义多个结构类型时,此方法有局限性:
// This documents FirstType and SecondType together type ( // FirstType docs FirstType struct { // FirstMember docs FirstMember string } // SecondType docs SecondType struct { // SecondMember docs SecondMember string } )
在这种情况下,文档与 GenDecl 和单个 TypeSpec 相关联。
虽然可以使用 AST 解析注释,但最好使用 go/doc 包处理这个任务。 go/doc 包可以有效地检索各种 Go 组件的文档注释,包括结构类型。
以上是为什么 Go 解析器和 Ast 包不检测结构类型的文档注释?的详细内容。更多信息请关注PHP中文网其他相关文章!