我一直在与 go/ast 合作来解析 go 源代码并将其复制到另一个文件中,作为供应商练习的一部分。我已经处理了大部分事情 - 函数、类型等 - 但我正在努力处理使用 iota 的 const 声明。我正在迭代 ast.File.Scope.Objects 中的项目,并复制 Scope.Outer == nil 及其 Decl == ast.ValueSpec 的对象的源代码,基本上意味着顶级变量和常量。
在类型块中:
const (
a = iota
b
c
d
)
Run Code Online (Sandbox Code Playgroud)
...它们中的每一个都注册为一个单独的对象,这很公平。但是,我很难为它们分配值,因为当我迭代它们时,对象也可能乱序。我可以将这些值视为 ast.Object.Data,但当它设置为 1 << iota 等时,它似乎也关闭了。有人对如何获得分配了正确 iota 值的分组 const 声明有任何想法吗?
谢谢你!