首页 >后端开发 >Golang >为什么 Go 解析器和 Ast 包不检测结构类型的文档注释?

为什么 Go 解析器和 Ast 包不检测结构类型的文档注释?

DDD
DDD原创
2024-11-14 17:20:02496浏览

Why Aren't Go Parser and Ast Packages Detecting Doc Comments on Struct Types?

Go 解析器未检测到结构类型上的文档注释

尽管使用了 Go 的解析器和 ast 包,但提供的代码无法检测到结构类型 FirstType 上的文档注释

理解问题

go/doc 包的 readType 函数建议当 TypeSpec 没有关联文档时,从 GenDecl 中检索文档。

检查 AST

为了检查 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn