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次
浙公网安备 33010602011771号