包同步提供基本同步原语,例如互斥锁。除了 Once 和 WaitGroup 类型之外,大多数类型都适用于低级库例程。通过通道和通信可以更好地完成更高级别的同步。
不应复制包含此包中定义的类型的值。
package main
import (
"fmt"
"sync"
)
func main() {
var once sync.Once
onceBody := func() {
fmt.Println("Only once")
}
done := make(chan bool)
for i := 0; i < 10; i++ {
go func() {
once.Do(onceBody)
done <- true
}()
}
for i := 0; i < 10; i++ {
<-done
}
}