我正在尝试获取 struct
和 struct field
的 Doc
和 Comment
s,但我似乎无法这样做,它们只是变成空的:
package main
import (
"fmt"
"go/ast"
"go/parser"
"go/token"
)
func main() {
src := `package test
// Hello
type A struct {
// Where
B int // Are you
}
`
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "", src, 0)
if err != nil {
panic(err)
}
ast.Inspect(f, func(n ast.Node) bool {
switch t := n.(type) {
case *ast.TypeSpec:
fmt.Println(t.Doc.Text())
case *ast.StructType:
for _, field := range t.Fields.List {
fmt.Println(field.Doc.Text())
fmt.Println(field.Comment.Text())
}
}
return true
})
}
产生三个空白行:https://play.golang.org/p/4Eh9gS-PUg
看到类似问题Go parser not detecting Doc comments on struct type但是当尝试运行已接受的示例时,它变成了空的——所以我想知道自该版本以来是否发生了某些变化。
最佳答案
为了获得注释,您必须将参数中的 parser.ParseComments 标志传递给 parser.ParseFile():
parser.ParseFile(fset, "", src, parser.ParseComments)
此处记录了所有可能的模式标志:
关于执行 ast.Inspect 时的 golang 评论和文档字段——为什么它们是空白的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46447497/