我看到了两种在 Go 中使用单例模式的方法。使用init()函数使用sync.Once同步包有什么区别,哪个在线程安全方面更好?如果init()解决了所有问题,那么它有什么sync.Once用呢?
1 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
规范保证包init()
函数只被调用一次并且全部从单个线程调用(并不是说它们不能启动 goroutines,但它们是线程安全的,除非你让它们成为多线程)。
您使用的原因sync.Once
是如果您想控制是否以及何时执行某些代码。程序包init()
函数将在应用程序启动期间调用。sync.Once
允许您执行诸如延迟初始化之类的事情,例如在第一次请求时创建资源(但只有一次,以防多个“第一个”请求同时进入)而不是在应用程序启动时;或者仅在实际需要时才初始化资源。
- 1 回答
- 0 关注
- 164 浏览
添加回答
举报
0/150
提交
取消