Go AST:获取所有结构

我希望能够获得所有结构。例如,假设我们有:


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 {

        //..

    }


}


慕姐4208626
浏览 178回答 1
1回答

慕斯王

解析每个感兴趣的文件。检查文件以查找结构类型。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.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go