https://segmentfault.com/a/

go的包不允许循环包含,具体例子:

main.go:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
import (
"fmt"
"test/pkg1"
)
func main() {
fmt.Println("in main.main")
fmt.Printf("pkg1.Black=%s\n", pkg1.Black)
fmt.Printf("pkg2.Black=%s\n", pkg2.Black)
}
func init() {
fmt.Println("in main.init")
fmt.Printf("pkg1.Black=%s\n", pkg1.Black)
fmt.Printf("pkg2.Black=%s\n", pkg2.Black)
}

pkg1.go:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package pkg1
import (
"fmt"
"test/pkg2"
)
const (
Black string = "#000"
white string = "#fff"
)
func init() {
fmt.Println("in pkg1.init")
fmt.Printf("pkg2.Black=%s\n", pkg2.Black)
}

pkg2.go:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package pkg2
import (
"fmt"
"test/pkg1"
)
const (
Black string = "#000"
white string = "#fff"
)
func init() {
fmt.Println("in pkg2.init")
fmt.Printf("pkg1.Black=%s\n", pkg1.Black)
}

go build报错:

1
import cycle not allowed