使用main.go在其他程序包中声明的结构

时间:2018-09-20 05:51:59

标签: go

我在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中声明的结构?

2 个答案:

答案 0 :(得分:5)

除非在极少数情况下,否则无法导入package main

我在去年的mailing list上找到了这种解释。

  

但是,可以在另一个主程序包中导入一个主程序包。   总结一下:

     

1)支持在外部测试中导入主程序包
  2)支持在主包中导入主包
  3)不支持 在非主包中导入主包

     

这对我来说似乎很合理,但是AFAIK并未对此进行记录。

language spec

  

通过将称为主包的单个 未导入 程序包与它导入的所有程序包可传递地链接起来,可以创建一个完整的程序。主程序包必须具有程序包名称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