您的位置 首页 编程知识

Golang如何使用sync.Once确保单次执行

sync.Once用于确保操作仅执行一次,适用于单例、配置加载等场景;其Do方法保证并发安全,但若函数pani…


sync.Once用于确保操作仅执行一次,适用于单例、配置加载等场景;其Do方法保证并发安全,但若函数panic则视为已执行,后续不再重试。

Golang如何使用sync.Once确保单次执行

在Go语言中,sync.Once 是一个用于确保某个操作在整个程序运行过程中只执行一次的同步原语。它常用于单例模式、配置初始化、资源加载等场景,保证并发安全的同时避免重复执行。

sync.Once 的基本用法

sync.Once 只有一个方法 Do(f func()),传入一个函数,该函数只会被执行一次,无论有多少个 routine 同时调用。

示例:

 var once sync.Once var instance *MyStruct  func getInstance() *MyStruct {     once.Do(func() {         instance = &MyStruct{}     })     return instance } 
登录后复制

多个 goroutine 调用 getInstance() 时,内部的初始化函数只会执行一次,其余调用会直接返回已创建的实例。

立即学习“”;

使用场景举例

常见用途包括:

行者AI绘图创作,唤醒新的灵感,创造更多可能

Golang如何使用sync.Once确保单次执行100

  • 单例对象创建:如数据库连接、日志实例等全局唯一对象。
  • 配置加载:确保或只解析一次。
  • 资源初始化:例如监听、启动后台任务等只需启动一次的操作。

示例:加载配置

 var config map[string]string var loadOnce sync.Once  func LoadConfig() map[string]string {     loadOnce.Do(func() {         config = make(map[string]string)         // 模拟读取配置         config["api_key"] = "12345"         config["timeout"] = "30"     })     return config } 
登录后复制

注意事项

使用 sync.Once 需要注意以下几点:

  • 传给 Do 的函数如果发生 panic,会被认为已执行,后续调用不会再次尝试。
  • 多个 Once 实例互不影响,每个实例独立控制一次执行。
  • Do 的参数必须是 func() 类型,不能传带参数的函数,可通过闭包捕获外部变量。

基本上就这些。sync.Once 简单高效,是 Go 中确保初始化安全的重要。不复杂但容易忽略细节,比如 panic 导致无法重试的问题,使用时需谨慎处理函数内部错误。

以上就是Golang如何使用sync.Once确保单次执行的详细内容,更多请关注php中文网其它相关文章!

相关标签:

大家都在看:

本文来自网络,不代表四平甲倪网络网站制作专家立场,转载请注明出处:http://www.elephantgpt.cn/15899.html

作者: nijia

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

18844404989

在线咨询: QQ交谈

邮箱: 641522856@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部