sync.Once
在代码中,once := &sync.Once{} 的作用是确保特定操作只执行一次,这是 Go 语言中实现单例模式的标准方法。
具体作用:
- 保证线程安全的单次执行
- sync.Once 是 Go 标准库提供的同步原语
- 确保在并发环境下,once.Do() 中的函数体只执行一次
- 避免多个 goroutine 同时初始化 monitor 实例造成的数据竞争
once := &sync.Once{} once.Do(func(){ xxx.aaa })
即时上面代码被多次执行,实际xxx.aaa也只会被执行一次。
具体原理:
第一次调用once.Do()时,会执行内部的函数,并标记为已执行
后续再次执行once.Do()时,会直接返回而不执行函数体
这个机制是原子性的,适用于并发场景
收藏文章数量从多到少与“把书读薄”是一个道理