我希望能够获得所有结构。例如,假设我们有: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.
- 1 回答
- 0 关注
- 176 浏览
添加回答
举报
0/150
提交
取消