golang中once的应用范围验证
把once设置为全局变量
var once sync.Once
func main() {
onceFunc()
onceFunc()
}
func onceFunc() {
func1 := func() {
fmt.Println("fun1")
}
once.Do(func1)
func2 := func() {
fmt.Println("fun2")
}
once.Do(func2)
}
输出为:
fun1
再把once设置为局部变量
func main() {
onceFunc()
onceFunc()
}
func onceFunc() {
var once sync.Once
func1 := func() {
fmt.Println("fun1")
}
once.Do(func1)
func2 := func() {
fmt.Println("fun2")
}
once.Do(func2)
}
输出结果为
fun1
fun1
同一个 once,仅第一次 Do(f) 中的 f 会被执行,第二次哪怕换成 Do(f1),f1 也不会被执行。
浙公网安备 33010602011771号