package demo
type People struct{
Name string
Age uint
}
type UserInfo struct{
Address string
Hobby []string
NickNage string
}
另一个档案:
import demo
在这个文件中,如何在demo pkg中获取所有结构?
答案 0 :(得分:3)
Go在包级别没有保留结构,接口或变量的主列表,所以不幸的是你不可能。
答案 1 :(得分:1)
尽管如此,所有内容并未丢失:如果您拥有“演示”来源,则可以使用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编译器比你快)。
这种可能性对于调试,测试和重构非常有用。
此外,在您编写代码几个月后,您的代码和您自己的代码也很容易理解。