我在 $GOPATH/dalu/myproject
上有一个Go项目,其中包含以下文件:
main.go
:
package main
import "dalu/myproject/subpackage"
var GV string = "World"
func main() {
subpackage.Hello()
}
subpackage/subpackage.go
:
package subpackage
import (
"fmt"
"dalu/myproject"
)
func Hello() {
//? fmt.Println("Hello"+GV)
}
奖金(如果可以的话): 我尝试了类似的更多子包,当尝试在main中导入一个子包导入另一个子包,导入第一个提到的子包我得到“导入循环不允许”
答案 0 :(得分:37)
正如编译器所说的那样,Go不允许循环依赖,而且与C ++不同,这里没有前向声明技巧。
如果你有一个州:
A imports B AND B imports A
它会测量您需要移动它们之间共享的任何内容来打包C
,并执行以下操作:
A imports B, C AND B imports C
每个人都很开心!
或在您的示例中,添加名为dalu/myproject/gv/gv.go
的文件,并在其中定义此GV
。然后在main
和subpackage