Go sync.Once 怎么用?并发安全的单例初始化实现
sync.Once 保证某个函数只执行一次(并发安全),用于单例初始化、懒加载配置、只注册一次的全局操作:var once sync.Once; once.Do(func() { initSomething() })。即使多个 goroutine 同时调用 Do,函数也只执行一次,其他 goroutine 等待完成。内部实现:原子标志 + Mutex + 双重检查。注意:Once 不可复制;Do 内函数 panic 后 once 状态仍标记完成(函数不会重试),Do 内尽量避免 panic。
一起交流
分享经验,让问题更进一步
讨论,从你的观点开始
还没有回复,欢迎补充经验或分享不同的思路。