我在 $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 中导入一个子包时,该子包会导入另一个子包,该子包会导入第一个提到的子包,我得到“不允许导入周期”
最佳答案
正如编译器所说的那样,Go 不允许循环依赖,而且与 C++ 不同,这里没有前向声明技巧。
如果您处于以下状态:
A 导入 B AND B 导入 A
这意味着您需要将它们之间共享的任何内容移动到打包 C
中,然后执行以下操作:
A 导入 B,C 和 B 导入 C
大家都很开心!
或者在您的示例中,添加一个名为 dalu/myproject/gv/gv.go
的文件,并在其中定义此 GV
。然后在 main
和 subpackage
关于go - 从子包中的 main 导入 vars/consts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205696/