Go语言的sync.Once()函数

sync.Once 是 Go 语言标准库 sync 包提供的一个类型,它用于确保一个函数只会被执行一次,即使在多个 goroutine 中同时调用。

sync.Once 包含一个 Do 方法,其签名如下:

go 复制代码
func (o *Once) Do(f func()) 

Do 方法接受一个函数作为参数,并且保证该函数只会被调用一次,即使在多个 goroutine 中同时调用 Do 方法。

通常,sync.Once 的用法是在需要确保某个操作只执行一次的情况下使用,比如在初始化全局变量时。

以下是一个示例:

go 复制代码
package main

import (
	"fmt"
	"sync"
)

var (
	once sync.Once
	num  int
)

func setup() {
	num = 42
	fmt.Println("Setup complete")
}

func main() {
	for i := 0; i < 3; i++ {
		once.Do(setup)
		fmt.Println(num)
	}
}

在上述示例中,setup 函数将被 sync.Once 确保只会执行一次,即使在多次调用 once.Do(setup) 也是如此。这保证了 num 变量只会被初始化一次。

相关推荐
Wenweno0o1 小时前
Eino-Graph 实战详解
golang·智能体·eino
咬_咬5 小时前
go语言学习(数组与切片)
开发语言·学习·golang·数组·切片
xwz小王子6 小时前
智元发布 GO-2:动作空间推理 + 全生命周期闭环,让机器人稳定可靠落地
开发语言·golang·机器人
GDAL6 小时前
Go Channel `make()` 深入全面讲解
golang·make·通道
XMYX-08 小时前
06 - Go 的切片、字典与遍历:从原理到实战
后端·golang
qq_396153459 小时前
docker ddns-go 忘记密码
docker·容器·golang
XMYX-09 小时前
04 - Go 的变量和常量:零值、类型推导与枚举
开发语言·golang
好家伙VCC9 小时前
**InfluxDB实战进阶:基于Golang的高性能时序数据采集与可视化方
java·开发语言·后端·python·golang
好家伙VCC9 小时前
**发散创新:基于Go语言的服务网格实践与流量治理实战**在微服务架构日益复杂的今天,**服务网格(S
java·python·微服务·架构·golang
lolo大魔王10 小时前
Go语言的循环语句、判断语句、通道选择语句
开发语言·算法·golang