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

相关推荐
人间打气筒(Ada)9 小时前
go实战案例:如何通过 Service Meh 实现熔断和限流
java·开发语言·golang·web·istio·service mesh·熔断限流
weixin_4491904110 小时前
defer和defer func执行区别
golang
呆萌很11 小时前
【GO】指针练习题
golang
cch891814 小时前
PHP vs Go:Web开发选谁更胜一筹?
前端·golang·php
想搞艺术的程序员15 小时前
Go map 核心黑魔法:tophash 标记位的极致复用与性能跃升
golang·源码分析·性能
呆萌很17 小时前
【GO】函数创建和使用
golang
echome88820 小时前
Go 语言并发编程:Goroutine 与 Channel 实战指南
后端·golang
风向决定发型丶20 小时前
Java 线程池 vs Go GMP
java·开发语言·golang
伐尘21 小时前
【图形学】CS:GO 的 “Uber 着色器” 是啥?
开发语言·golang·着色器
FJW02081421 小时前
什么是Go语言?云原生为什么要学Go?
开发语言·云原生·golang