golang中的sync.once
生活随笔
收集整理的這篇文章主要介紹了
golang中的sync.once
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
sync.Once.Do(f func())是一個挺有趣的東西,能保證once只執行一次,無論你是否更換once.Do(xx)這里的方法,這個sync.Once塊只會執行一次
與sync.WaitGroup類型一樣,sync.Once類型也屬于結構體類型,同樣也是開箱即用和并發安全的。由于這
個類型中包含了一個sync.Mutex類型的字段,所以,復制該類型的值也會導致功能的失效。
Once類型的Do方法只接受一個參數,這個參數的類型必須是func(),即:無參數聲明和結果聲明的函數。
package mainimport ("fmt""sync""time" )func onces() {fmt.Println("onces") }func onced() {fmt.Println("onced") }var once sync.Oncefunc 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) }輸出
onces count: --- 0 count: --- 1 count: --- 2 count: --- 3 count: --- 4 count: --- 5 count: --- 6 count: --- 7 count: --- 8 count: --- 9 213光會用是不夠的,再來看下sync.once的實現原理
源碼:
總結
以上是生活随笔為你收集整理的golang中的sync.once的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang对象池
- 下一篇: golang中的socket