如何在golang中获取所有已定义的结构?

时间:2013-12-27 16:06:14

标签: go

package demo

type People struct{
  Name string
  Age uint
}

type UserInfo struct{
  Address string
  Hobby []string
  NickNage string
}

另一个档案:

import demo

在这个文件中,如何在demo pkg中获取所有结构?

4 个答案:

答案 0 :(得分:3)

Go在包级别没有保留结构,接口或变量的主列表,所以不幸的是你不可能。

答案 1 :(得分:1)

Drat,我希望Jsor的回答是错误的,但我找不到任何办法。

尽管如此,所有内容并未丢失:如果您拥有“演示”来源,则可以使用parser包来获取所需信息。虽然有点黑客。

答案 2 :(得分:1)

使用go/importer

pkg, err := importer.Default().Import("time")
if err != nil {
    fmt.Println("error:", err)
    return
}
for _, declName := range pkg.Scope().Names() {
    fmt.Println(declName)
}

(注意,这会在Go Playground返回一个错误)。

答案 3 :(得分:0)

你是来自某种脚本语言吗?它看起来如此。

Go有充分的理由宣传不要让'魔术'进入你的代码

一开始看起来很简单(可以访问所有结构,在某处自动注册,“保存”编码),当项目变大时,最终会出现调试和维护的噩梦。

然后,您必须记录并查找所有糟糕的惯例和含义。 我知道我在说什么,因为我使用ruby和nodejs多次使用这条路线。

相反,如果你明确地说明了一切,你就会获得一些功能,比如重命名People结构 编译器告诉你在整个代码库中使用它的位置(并且go编译器比你快)。

这种可能性对于调试,测试和重构非常有用。

此外,在您编写代码几个月后,您的代码和您自己的代码也很容易理解。