为了账号安全,请及时绑定邮箱和手机立即绑定

Go AST:获取所有结构

Go AST:获取所有结构

Go
慕姐4208626 2023-01-03 14:06:44
我希望能够获得所有结构。例如,假设我们有:type SomeType struct {    // ..}type someType2 struct {    //..}我们的代码。structs := getAllStructs(srcPath)  //gets SomeType and someType2我有一些代码可以在 srcPath 中找到所有 .go 文件并parser.ParseFile对其进行处理。有没有办法使用ast、parser、packages等...我可以在任何范围内一次获取所有结构?如果有一个不在包范围内的结构怎么办?我怎样才能在函数内部获得结构声明?像:func main() {        type someType3 struct {        //..    }}
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

解析每个感兴趣的文件。检查文件以查找结构类型。

fset := token.NewFileSet()

f, err := parser.ParseFile(fset, fileName, nil, 0)

if err != nil {

    log.Fatal(err)

}


// Collect the struct types in this slice.

var structTypes []*ast.StructType


// Use the Inspect function to walk AST looking for struct

// type nodes.

ast.Inspect(f, func(n ast.Node) bool {

    if n, ok := n.(*ast.StructType); ok {

         structTypes = append(structTypes, n)

    }

    return true

})


// The slice structTypes contains all *ast.StructTypes in the file.


查看完整回答
反对 回复 2023-01-03
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信