为了账号安全,请及时绑定邮箱和手机立即绑定

golang 中 init() 和 sync.Once 的区别

golang 中 init() 和 sync.Once 的区别

Go
繁花如伊 2023-03-21 17:00:03
我看到了两种在 Go 中使用单例模式的方法。使用init()函数使用sync.Once同步包有什么区别,哪个在线程安全方面更好?如果init()解决了所有问题,那么它有什么sync.Once用呢?
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

规范保证包init()函数只被调用一次并且全部从单个线程调用(并不是说它们不能启动 goroutines,但它们是线程安全的,除非你让它们成为多线程)。

您使用的原因sync.Once是如果您想控制是否以及何时执行某些代码。程序包init()函数将在应用程序启动期间调用。sync.Once允许您执行诸如延迟初始化之类的事情,例如在第一次请求时创建资源(但只有一次,以防多个“第一个”请求同时进入)而不是在应用程序启动时;或者仅在实际需要时才初始化资源。


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信