有时候我们某个函数只需要运行一次,我们可以使用sync.Once来保证,参考代码:
package main
import (
"fmt"
"sync"
)
func main() {
initFunc := func() {
fmt.Println("init func must run once")
}
var once sync.Once
done := make(chan bool)
for i := 0; i < 10; i++ {
go func(i int) {
fmt.Println(i)
once.Do(initFunc)
done <- true
}(i)
}
for i := 0; i < 10; i++ {
<-done
}
}
当我们仅仅想运行一次initFunc时候,可以用sync.Once来运行。比如获取单例实例。