sync.Once.Do(f func())

sync.Once.Do(f func())是一個挺有趣的東西,能保證once只執行一次,不管你是否更換once.Do(xx)這裏的方法,這個sync.Once塊只會執行一次。string

 

  1. package main  
  2.   
  3. import (  
  4.     "fmt"  
  5.     "sync"  
  6.     "time"  
  7. )  
  8.   
  9. var once sync.Once  
  10.   
  11. func main() {  
  12.   
  13.     for i, v := range make([]string, 10) {  
  14.         once.Do(onces)  
  15.         fmt.Println("count:", v, "---", i)  
  16.     }  
  17.     for i := 0; i < 10; i++ {  
  18.   
  19.         go func() {  
  20.             once.Do(onced)  
  21.             fmt.Println("213")  
  22.         }()  
  23.     }  
  24.     time.Sleep(4000)  
  25. }  
  26. func onces() {  
  27.     fmt.Println("onces")  
  28. }  
  29. func onced() {  
  30.     fmt.Println("onced")  
  31. }  

整個程序,只會執行onces()方法一次,onced()方法是不會被執行的。class

相關文章
相關標籤/搜索