我在main.go
中声明了一个结构,如下所示:
type Organization struct {
ID string `json:"id"`
Count int `json:"count"` //node count
}
我有一个名为configuration
的软件包,并且具有这样的功能:
func foo(org main.Organization) {
}
问题是我无法访问main.Organization
。有什么方法可以访问另一个软件包中main.go
中声明的结构?
答案 0 :(得分:5)
除非在极少数情况下,否则无法导入package main
。
我在去年的mailing list上找到了这种解释。
但是,可以在另一个主程序包中导入一个主程序包。 总结一下:
1)支持在外部测试中导入主程序包
2)支持在主包中导入主包
3)不支持 在非主包中导入主包这对我来说似乎很合理,但是AFAIK并未对此进行记录。
通过将称为主包的单个 未导入 程序包与它导入的所有程序包可传递地链接起来,可以创建一个完整的程序。主程序包必须具有程序包名称main,并声明一个不带参数且不返回值的main函数。
(在两个引号中都强调我的意思)
答案 1 :(得分:1)
您不能在go中从其他包中导入主包(在某些情况下,例如测试用例除外)。
相反,创建一个新目录,例如名为mytypes
,在此文件夹中创建文件types.go
,如下所示:
package mytypes
type Organization struct {
ID string `json:"id"`
Count int `json:"count"` //node count
}
无论何时要使用此结构,例如在main中,您都import "mytypes"
并将Organization
结构用作mytypes.Organization
或者,将Organization
结构移动到configuration
包中,并在主目录中使用configuration.Organization
。