無錫企業(yè)網(wǎng)站seo/百度廣告投訴電話
sync.Once 是 Go 語言標(biāo)準(zhǔn)庫 sync 包提供的一個(gè)類型,它用于確保一個(gè)函數(shù)只會被執(zhí)行一次,即使在多個(gè) goroutine 中同時(shí)調(diào)用。
sync.Once 包含一個(gè) Do 方法,其簽名如下:
func (o *Once) Do(f func())
Do 方法接受一個(gè)函數(shù)作為參數(shù),并且保證該函數(shù)只會被調(diào)用一次,即使在多個(gè) goroutine 中同時(shí)調(diào)用 Do 方法。
通常,sync.Once 的用法是在需要確保某個(gè)操作只執(zhí)行一次的情況下使用,比如在初始化全局變量時(shí)。
以下是一個(gè)示例:
package mainimport ("fmt""sync"
)var (once sync.Oncenum int
)func setup() {num = 42fmt.Println("Setup complete")
}func main() {for i := 0; i < 3; i++ {once.Do(setup)fmt.Println(num)}
}
在上述示例中,setup 函數(shù)將被 sync.Once 確保只會執(zhí)行一次,即使在多次調(diào)用 once.Do(setup) 也是如此。這保證了 num 變量只會被初始化一次。