sync.Once 可以确保一个函数只会执行一次。一旦某个函数被调用,就会标记一个标志位,下一次再调用该函数就会直接返回而不是执行函数体。
once.Do() 接收一个函数的参数,函数只会被调用一次,以后再次调用该函数时,Do()将直接返回。
具体使用方法如下:
-
定义一个 sync.Once 对象
-
定义一个函数 f
-
调用 once.Do(f)
示例代码:
var once sync.Once
func setup() {
fmt.Println("Performing setup...")
}
func main() {
once.Do(setup)
once.Do(setup)
}
结果:
Performing setup...
解释:
第一次调用 Do 方法时,setup 函数被执行了;第二次调用 Do 方法时,setup 函数并没有被执行。这就是 sync.Once 的作用。