sync.Once.Do(f func())是一個挺有趣的東西,能保證once只執行一次,不管你是否更換once.Do(xx)這裏的方法,這個sync.Once塊只會執行一次。string
- package main
-
- import (
- "fmt"
- "sync"
- "time"
- )
-
- var once sync.Once
-
- func main() {
-
- for i, v := range make([]string, 10) {
- once.Do(onces)
- fmt.Println("count:", v, "---", i)
- }
- for i := 0; i < 10; i++ {
-
- go func() {
- once.Do(onced)
- fmt.Println("213")
- }()
- }
- time.Sleep(4000)
- }
- func onces() {
- fmt.Println("onces")
- }
- func onced() {
- fmt.Println("onced")
- }
整個程序,只會執行onces()方法一次,onced()方法是不會被執行的。class