Go 单例模式

来源:互联网 发布:四代目大和辰之 淘宝 编辑:程序博客网 时间:2024/06/07 20:39

    单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以包在系统中一个类只有一个实例且该实例易于访问,从而方便对实例个数的控制并节约系统资源。


懒汉模式(Lazy Loading)

   懒汉模式是开源项目中使用最多的一种,最大的缺点是非线程安全的。

type singleton struct {}// privatevar instance *singleton// publicfunc GetInstance() *singleton {    if instance == nil {        instance = &singleton{}     // not thread safe    }    return instance}


带锁的单例模式
type singleton struct {}var instance *singletonvar mu sync.Mutexfunc GetInstance() *singleton {    mu.Lock()    defer mu.Unlock()    if instance == nil {        instance = &singleton{}     // unnecessary locking if instance already created    }    return instance}

带检查锁的单例模式

if instance == nil {     // <-- Not yet perfect. since it's not fully atomic        mu.Lock()        defer mu.Unlock()         if instance == nil {            instance = &singleton{}        }    }    return instance}

import "sync"import "sync/atomic"var initialized uint32...func GetInstance() *singleton {    if atomic.LoadUInt32(&initialized) == 1 {        return instance    }    mu.Lock()    defer mu.Unlock()    if initialized == 0 {         instance = &singleton{}         atomic.StoreUint32(&initialized, 1)    }    return instance}


比较好的一种方式sync.Once

import (    "sync") type singleton struct {} var instance *singletonvar once sync.Once func GetInstance() *singleton {    once.Do(func() {        instance = &singleton{}    })    return instance}



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 排气阀规格 水管排气阀 微量排气阀 复合式排气阀 高压快速排气阀 汽车排气阀 卧式排气阀 单口排气阀 给水排气阀 排气阀型号 锅炉排气阀 真空排气阀 排气阀安装 自动排气阀价格 电磁排气阀 暖气片排气阀 末端排气阀 排气阀漏水 三通排气阀 液压缸排气阀 地暖排气阀 超压排气阀 卧式自动排气阀 水箱排气阀 复合式排气阀厂家 全自动排气阀 热水器排气阀 立式排气阀 p41x自动排气阀 双向排气阀 排气阀原理 自动双口排气阀 自动排气阀e121 供水排气阀 快速排气阀工作原理 不锈钢微量排气阀 p41x排气阀 热水排气阀 减压排气阀 pe排气阀 碳钢排气阀