go并发:用sync.Once实现单例

一,代码:

//实现单例的数据结构
type SingleObject struct {

}
//最终获得的单例对象
var instance *SingleObject
//变量one是一个sync.Once的实例
var one sync.Once

//方法:得到单例对象
func getInstance() *SingleObject {
    one.Do(func() {
        //初始化变量
        instance = &SingleObject{}
        //打印信息
        fmt.Println("实例化SingleObject")
    })
    return instance
}


// 入口函数
func main() {

    //启动100个子协程,并发调用getInstance方法
    for i:=0;i<100;i++ {
        go func() {
            _=getInstance()
        }()
    }
    
    time.Sleep(time.Second)
}

二,说明:

sync.Once的实例对象,它的do方法,用来保证函数只会被执行一次

三,运行效果:

$ go run main.go 
实例化SingleObject

可以看到实始化实例的代码只执行了1次

posted @ 2025-03-09 13:46  刘宏缔的架构森林  阅读(27)  评论(0)    收藏  举报