golang不允许循环import package,如果检测到import cycle,会在编译时报错,通常import cycle是因为设计错误或包的规划问题。
例如下面这段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | // src/ta/ta.go package ta import _ "tb" import "fmt" func Test(){ fmt.Println("outputta") } // src/tb/tb.go package tb import _ "ta" import "fmt" func Test(){ fmt.Println("outputtb") } // src/test/test.go package main import "ta" import "tb" func main(){ ta.Test() tb.Test() } |
输出结果如下:
1 2 3 4 5 6 7 | weihualiudeMacBook-Pro:testmweihualiu$goinstalltest importcyclenotallowed packagetest importsta importstb importsta weihualiudeMacBook-Pro:testmweihualiu$ |
golang对于包互相引用是绝对不允许的。从这点上可以看出,在大型项目中,golang的这种设计更合理。