Go 如何获取所有已定义的类型? 软件包演示 类型人员结构{ 名称字符串 年龄单位 } 类型UserInfo struct{ 地址字符串 爱好[]字符串 小饰物串 }

Go 如何获取所有已定义的类型? 软件包演示 类型人员结构{ 名称字符串 年龄单位 } 类型UserInfo struct{ 地址字符串 爱好[]字符串 小饰物串 },go,Go,另一个方案: import "demo" 在这个包中,我如何获得从演示包中导出的所有类型?Go在包级别没有保留结构、接口或变量的主列表,因此很遗憾,您所问的是不可能的。Drat,我希望Jsor的答案是错误的,但我找不到任何方法 尽管如此,一切都没有丢失:如果您有“demo”的源代码,您可以使用解析器包来查找您需要的信息。不过还是有点老套。你是不是来自一些脚本语言?看起来是这样 Go有很好的理由传播到不要在代码中插入“魔力” 一开始看起来很简单的东西(可以访问所有结构,在某个地方自动注册它们,“

另一个方案:

import "demo"

在这个包中,我如何获得从演示包中导出的所有类型?

Go在包级别没有保留结构、接口或变量的主列表,因此很遗憾,您所问的是不可能的。

Drat,我希望Jsor的答案是错误的,但我找不到任何方法


尽管如此,一切都没有丢失:如果您有“demo”的源代码,您可以使用
解析器
包来查找您需要的信息。不过还是有点老套。

你是不是来自一些脚本语言?看起来是这样

Go有很好的理由传播到不要在代码中插入“魔力”

一开始看起来很简单的东西(可以访问所有结构,在某个地方自动注册它们,“保存”编码)最终会在项目变大时变成调试和维护的噩梦

然后你将不得不记录和查找你所有糟糕的约定和含义。 我知道我在说什么,因为我用ruby和nodejs走了好几次这条路

相反,如果您将所有内容都显式化,您将获得一些功能,例如重命名
人员
结构以让 编译器会告诉您它在整个代码库中的使用位置(go编译器比您更快)

这些可能性对于调试、测试和重构来说是非常宝贵的

而且,在编写代码几个月后,它还可以使您的代码更容易为您的同事和您自己进行推理

使用:

pkg,err:=importer.Default().Import(“时间”)
如果出错!=零{
fmt.Println(“错误:”,错误)
返回
}
对于u,declName:=范围pkg.Scope().Names(){
格式打印(declName)
}

(注意,这会在运行时返回一个错误)。

您想要实现什么?如果您以编程方式需要它,您可能希望使用
解析器,如下所示。如果您只是想了解自己的信息,可以使用
go doc
命令或godoc.org访问所有结构并不意味着您想自动注册它们。有一些原因,比如代码生成。@vimdude对于代码生成,您可以使用go解析器获取包的所有结构,并使用go:generate标志。