[Go] sync.Once

·  阅读 44

描述

sync.Once 是 Golang package 中使方法只执行一次的对象实现,作用与 init 函数类似。但也有所不同。

  • init 函数是在文件包首次被加载的时候执行,且只执行一次
  • sync.Onc 是在代码运行中需要的时候执行,且只执行一次

当一个函数不希望程序在一开始的时候就被执行的时候,我们可以使用 sync.Once

func main() {
	var once sync.Once
	onceBody := func() {
		fmt.Println("执行成功-success")
	}
	done := make(chan bool)
	for i := 0; i < 10; i++ {
		go func() {
			once.Do(onceBody)
			done <- true
		}()
	}
	for i := 0; i < 10; i++ {
		<-done
	}
}
复制代码

输出:

执行成功-success
复制代码

可以看出,10次的循环,匿名函数 onceBody 只被调用执行了一次。

分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改