为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取所有定义的类型?

如何获取所有定义的类型?

Go
拉丁的传说 2021-07-07 14:03:10
package demotype People struct {    Name string    Age  uint}type UserInfo struct {    Address  string    Hobby    []string    NickNage string}另一个包:import "demo"在这个包中,如何获取从演示包中导出的所有类型?
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-07-12
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

使用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 上返回错误)。


查看完整回答
反对 回复 2021-07-12
?
Qyouu

TA贡献1786条经验 获得超11个赞

你来自某种脚本语言吗?看起来是这样。

Go 有充分的理由进行传播,以免将“魔法”带入您的代码

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

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

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

这种可能性对于调试、测试和重构来说是无价的。

此外,它使您的代码在编写代码几个月后易于为您的编码人员和您自己推理。


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信