执行 ast.Inspect 时的 golang 评论和文档字段——为什么它们是空白的?

标签 go

我正在尝试获取 structstruct fieldDocComment 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)

此处记录了所有可能的模式标志:

https://golang.org/pkg/go/parser/#Mode

关于执行 ast.Inspect 时的 golang 评论和文档字段——为什么它们是空白的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46447497/

相关文章:

go - 我可以对返回 2 个参数的方法使用单个变量吗

unit-testing - 使用 go test (golang) 查找失败的测试文件名

go - 以编程方式检查 SPF、DKIM、DMARC

os.stdin 上的 golang io.TeeReader 中断 tty

go - Auth0 - 无法验证代码验证器错误

unit-testing - 以预定义的顺序执行测试用例

http - 由对等 GO 重置连接

json - Golang http 请求 POST 工作一次

golang追加语法错误: missing statement after label

git - 如何使 Go 模块语义导入版本控制 v2+ 与虚导入路径一起工作