Go 单例

栏目: Go · 发布时间: 6年前

内容简介:单例的作用不用我多说,大家都知道,那么在go中如何构造单例呢,下面是我的总结。一、 sync.Once用法在Go中有一个简洁的方法就是使用sync.Once,它可以在多协程中起到控制作用。实现起来也非常简单。

单例的作用不用我多说,大家都知道,那么在 go 中如何构造单例呢,下面是我的总结。

一、 sync.Once用法

在Go中有一个简洁的方法就是使用sync.Once,它可以在多协程中起到控制作用。实现起来也非常简单。

var (
    once     sync.Once
    instance *SingleTon
)

func GetInstance(str string) *SingleTon {
    once.Do(func() {
        instance = &SingleTon{Attr: str}
    })

    return instance
}

二、使用加锁机制

在Go语言中有个基础对象sync.Mutex,可以实现协程之间的同步逻辑。

var mu sync.Mutex

func GetInstance() *SingleTon {
  mu.Lock()
  defer mu.Unock()

    if Instance == nil {
        instance = &SingleTon{}
    }

    return instance
}

三、简单粗暴模式.

这种方式实现起来特别简单,直接判断一个实力是不是为nil, 如果是,则新生成;否则返回已有的。但它和多数语言一样,只适合用在单线程。这个就很鸡肋,几乎没有什么应用场景,倒是bug经常出在这里。

type SingleTon struct {
}

var instance *SingleTon

func GetInstance() *SingleTon {
    if Instance == nil {
        instance = &SingleTon{}
    }

    return instance
}

测试代码如下,从运行结果来看,都是一致的。

func main() {
    for i := 0; i < 10; i++ {
        go func() {
            s := GetInstance("test:" + strconv.Itoa(i))
            s.TestFunc()
        }()
    }
    time.Sleep(1e5)

}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人工智能基础

人工智能基础

汤晓鸥、陈玉琨 / 华东师范大学出版社 / 2018-4-1 / 35.00元

人工智能基础(高中版)》是面向高中学生的教材。讲授人工智能的发展历史、基本概念以及实际应用,使学生理解人工智能的基本原理,特别是数据、算法与应用之间的相互关系。并结合常见的应用场景,理解人工智能技术(包括感知与决策)的基本工作方式,通过动手实践,更深入地理解人工智能技术的原理、能力,以及在实用中面临的挑战。本书强调人工智能基本理念与原理的传递,注重创造力、想象力、整体思考,以及动手能力的提升。一起来看看 《人工智能基础》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具