sync.Once 是在代码运行中需要的时候执行,且只执行一次。
init 函数是在文件包首次被加载的时候执行,且只执行一次。
一个包中可以有多个 init 函数。
init 函数不能被其它函数调用。const、var、 init 函数与 main 函数的执行顺序:

验证代码
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
*/ 本文标题:golang init 与 sync.Once 区别
版权声明:本文使用「署名-非商业性使用-相同方式共享」创作共享协议,转载或使用请遵守署名协议。
相关文章
上一篇:挂载多分区镜像文件