GO Sync.Once 使用
sync.Once 用于确保某个函数只执行一次,无论有多少个 goroutine 尝试执行它。它有一个方法 Do(f func()),传入需要执行的函数。
基本用法示例:
package main
import (
"fmt"
"sync"
)
func main() {
var once sync.Once
done := make(chan bool)
// 模拟多个 goroutine 调用
for i := 0; i < 10; i++ {
go func(x int) {
// once.Do() 传入的函数只会执行一次
once.Do(func() {
fmt.Printf("只执行一次: %d\n", x)
})
// 这行每个 goroutine 都会执行
fmt.Printf("goroutine %d 完成\n", x)
done <- true
}(i)
}
// 等待所有 goroutine 完成
for i := 0; i < 10; i++ {
<-done
}
}常见使用场景: