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

package demo


type People struct {

    Name string

    Age  uint

}


type UserInfo struct {

    Address  string

    Hobby    []string

    NickNage string

}

另一个包:


import "demo"

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


拉丁的传说
浏览 269回答 3
3回答

Smart猫小萌

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

繁华开满天机

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

Qyouu

你来自某种脚本语言吗?看起来是这样。Go 有充分的理由进行传播,以免将“魔法”带入您的代码。一开始看起来很简单(可以访问所有结构,在某处自动注册它们,“保存”编码)最终会在您的项目变大时陷入调试和维护噩梦。然后,您将不得不记录和查找所有糟糕的约定和含义。我知道我在说什么,因为我用 ruby 和 nodejs 多次走这条路。相反,如果您将所有内容都明确化,您将获得一些功能,例如重命名People结构以让编译器告诉您它在整个代码库中的使用位置(并且 go 编译器比您快)。这种可能性对于调试、测试和重构来说是无价的。此外,它使您的代码在编写代码几个月后易于为您的编码人员和您自己推理。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go