内容简介:单例的作用不用我多说,大家都知道,那么在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)
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
21天学通C语言
(美国)琼斯(Bradley L.Jones) (美国)埃特肯(Peter Aitken) / 信达工作室 / 人民邮电出版社 / 2012-8 / 69.00元
《21天学通C语言(第6版•修订版)》是初学者学习C语言的经典教程。本版按最新的标准(ISO∕IEC:9899-1999),以循序渐进的方式介绍了C语言编程方面知识,并提供了丰富的实例和大量的练习。通过学习实例,并将所学的知识用于完成练习,读者将逐步了解、熟悉并精通C语言。《21天学通C语言(第6版•修订版)》包括四周的课程。第一周的课程介绍了C语言程序的基本元素,包括变量、常量、语句、表达式、函......一起来看看 《21天学通C语言》 这本书的介绍吧!