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