我希望能够获得所有 struct .例如,假设我们有:

type SomeType struct {
    // ..
}

type someType2 struct {
    //..
}

我们的代码.

structs := getAllStructs(srcPath)  //gets SomeType and someType2

我有一些代码可以找到所有内容.转到srcPath中的文件,并在其上执行parser.ParseFile.

有没有办法用astparserpackages等...我可以在任何范围内同时获得所有 struct ?如果有一个 struct 不是包范围的呢?如何在函数中也获得 struct 声明?例如:

func main() {
    
    type someType3 struct {
        //..
    }

}

推荐答案

Parse每个感兴趣的文件.Inspect查找 struct 类型的文件.

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.

Go相关问答推荐

+在具有html/模板Golang的Base64中

GoFR HTTP服务初始化中Open遥测传输和超时配置的说明

创建服务时云运行触发器执行失败

无法在32位计算机上运行Golang应用程序

如果第一次匹配条件,如何跳过切片中的值

替换字符串中的最后一个字符

如何在 Golang 中打印 2 列表?

使用模拟在 golang 中测试我的界面.专门测试调用同级函数的 1 个函数

从Go中的随机日期开始以天为单位获取时间

将 .gz 文件添加到 tar.gz 文件,但在添加之前解码 gz.输出文件被剪辑(损坏)

如何将多个切片打印为一个切片?

为什么此代码在运行命令 error="exec: not started" 时出现错误?

github.com/rs/zerolog 字段的延迟判断

在 Go 中读取数字行

如何在Go中替换符号并使下一个字母大写

go 是否对 struct 使用空间填充之类的东西?

如何在循环中旋转图像以便在 golang 中创建 GIF?

Go 导入范围查找 protobuf 类型

go routine 和接收错误或成功的通道

Go 错误处理、类型断言和 net package包