首页 > 代码库 > [Go] sync.Once 的用法

[Go] sync.Once 的用法

sync.Once.Do(f func()) 是一个非常有意思的东西,能保证 once 只执行一次,无论你是否更换 once.Do(xx) 这里的方法,这个 sync.Once块 只会执行一次。

package mainimport (	"fmt"	"sync"	"time")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)}func onces() {	fmt.Println("onces")}func onced() {	fmt.Println("onced")}

因此,常用于 单例模式 中!

[Go] sync.Once 的用法