Golang如何使用 sync.Once 进行 Goroutine 的单次执行?

在某些场景下,我们需要在程序运行过程中进行一些初始化操作,但是这些操作只需要执行一次。为了确保这些操作只执行一次,我们可以使用 sync.Once 类型。

sync.Once 类型提供了 Do 方法,用于执行一次函数。当多个 Goroutine 调用 Do 方法时,只有第一个 Goroutine 执行成功,其他 Goroutine 直接返回,不会重复执行。下面是一个示例代码:

var once sync.Once

func Init() {
    // 初始化操作
}

func DoInit() {
    once.Do(Init)
}

func main() {
    // 多个 Goroutine 调用 DoInit 方法
    go DoInit()
    go DoInit()
    go DoInit()
    go DoInit()

    // 等待所有 Goroutine 执行完成
    time.Sleep(time.Second)
}