singleton in go
2019-12-19 本文已影响0人
将军红
package disign
import "sync"
type singleton struct {}
var instance *singleton
// 1.单例模式
func NewSingleton() *singleton {
if instance == nil {
instance = &singleton{}
}
return instance
}//高并发下,会有多个instance生成 【❎】
//2.单例模式
var l sync.Locker
func NewSingleton2() *singleton {
l.Lock() // lock
defer l.Unlock()
if instance == nil { // check
instance = &singleton{}
}
return instance
} //同一时刻只有一个线程能拿到锁,其他的全部阻塞等待。【❎】
//单例模式 合适写法 【✔️】
var once sync.Once
func NewSingleton3() *singleton {
once.Do(func() {
instance = &singleton{}
})
return instance
}