美文网首页
singleton in go

singleton in go

作者: 将军红 | 来源:发表于2019-12-19 16:56 被阅读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
}



相关文章

网友评论

      本文标题:singleton in go

      本文链接:https://www.haomeiwen.com/subject/edfvnctx.html