在某些场景下,我们需要在程序运行过程中进行一些初始化操作,但是这些操作只需要执行一次。为了确保这些操作只执行一次,我们可以使用 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)
}