gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:25:45 58 4
gpt4 key购买 nike

我看到了两种在 Go 中使用单例模式的方法。

  1. 使用 init() 函数
  2. 在同步包中使用sync.Once

有什么区别,在线程安全方面哪个更好?

如果 init() 解决了所有问题,那么 sync.Once 有什么用?

最佳答案

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

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

关于go - golang 中 init() 和 sync.Once 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51953191/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com