登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-03-31 22:36:33 444浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《golang中init()和sync.Once的区别》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

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

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

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

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


解决方案


规范保证 init() 包函数仅被调用一次,并且全部从单个线程调用(并不是说它们无法启动 goroutine,而是它们是线程安全的,除非您将它们设为多线程) )。

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

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《golang中init()和sync.Once的区别》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>