单例
有时候需要确保在高并发的场景下有些事情只执行一次,比如加载配置文件、关闭管道等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var oc sync.Once var a int = 5
func main() { go func() { oc.Do(func() { a++ }) }() go func() { oc.Do(func() { a++ }) }() time.Sleep(1 * time.Second) fmt.Println(a) }
|