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 变量只会被初始化一次。

相关推荐
源代码•宸34 分钟前
Leetcode—3. 无重复字符的最长子串【中等】
经验分享·后端·算法·leetcode·面试·golang·string
阳明Coding1 小时前
golang从入门到通天—数据库操作(gorm框架使用)(最简单最详细的golang学习笔记)
笔记·学习·golang
源代码•宸6 小时前
Golang原理剖析(逃逸分析)
经验分享·后端·算法·面试·golang··内存逃逸
moxiaoran57537 小时前
Go语言并发处理
开发语言·后端·golang
Tony Bai7 小时前
AI 时代,Go 语言会“失宠”还是“封神”?—— GopherCon 2025 圆桌深度复盘
开发语言·人工智能·后端·golang
tc&7 小时前
新虚拟机安装 Go 环境:问题总结与解决方案
开发语言·后端·golang
钟离墨笺18 小时前
Go语言--2go基础-->基本数据类型
开发语言·前端·后端·golang
shhpeng18 小时前
go gtk 开发入门
golang
钟离墨笺20 小时前
Go语言--2go基础-->map
开发语言·后端·golang
Tony Bai20 小时前
Go 语言的“魔法”时刻:如何用 -toolexec 实现零侵入式自动插桩?
开发语言·后端·golang