如何在 Go 中获取包中的所有结构
在 Go 包中,可以获取包中所有结构的列表它们的名称或接口的形式。为此,最好的方法是解析 Go 源代码并专门隔离 ast.StructType。
源解析
要解析源代码,Go可以使用以下命令克隆源:
hg clone https://code.google.com/p/go/
源可用后,您可以使用漂亮的打印机隔离 ast.StructType,如以下代码片段所示:
func (P *Printer) Type(t *AST.Type) int { separator := semicolon; switch t.form { case AST.STRUCT, AST.INTERFACE: switch t.form { case AST.STRUCT: P.String(t.pos, "struct"); case AST.INTERFACE: P.String(t.pos, "interface"); } if t.list != nil { P.separator = blank; P.Fields(t.list, t.end); } separator = none; } }
替代方法
go/lint 工具使用的另一种方法是在其 lint.go 文件中执行相同的任务:
case *ast.StructType: for _, f := range v.Fields.List { for _, id := range f.Names { check(id, "struct field") } }
通过实现通过这种方法,您可以获得指定包中定义的所有结构的列表。
以上是如何检索 Go 包中的所有结构?的详细内容。更多信息请关注PHP中文网其他相关文章!