前景提要
init 函数是在文件包首次被加载的时候执行,且只执行一次。 sync.Once 是在代码运行中需要的时候执行,且只执行一次。 package main import ( "fmt" "sync" ) var once sync.Once func Test() { fmt.Println("Only once") } func main() { done := make(chan bool) for i := 0; i < 5; i++ { go func() { once.Do(Test) done <- true }() } for i := 0; i < 5; i++ { <-done } } /* Only once */