内容简介:1.非线程安全,虽然说是单例模式,但是如果实例以下是参考他人的方法。思路很好3.避免了每次加锁,提高了代码效率
Golang 单例模式的几种形式
1.非线程安全,虽然说是单例模式,但是如果实例 正在创建中 ,此时多个线程同时访问,就会获得多个结果
package main
var instance *Singleton
type Singleton struct {
}
func Instance() *Singleton{
if instance == nil {
instance = &Singleton{}
}
return instance
}
- 加锁单例模式
package main
import "sync"
var (
instance *Singleton
mu sync.Mutex
)
type Singleton struct {
}
func Instance() *Singleton{
mu.Lock()
defer mu.Unlock()
if instance == nil {
instance = &Singleton{}
}
return instance
}
以下是参考他人的方法。思路很好
3.避免了每次加锁,提高了代码效率
package main
import "sync"
var (
instance *Singleton
mu sync.Mutex
)
type Singleton struct {
}
func Instance() *Singleton {
if instance == nil {
mu.Lock()
defer mu.Unlock()
if instance == nil {
instance = &Singleton{}
}
}
return instance
}
4. once
实现
package main
import "sync"
var (
instance *Singleton
once sync.Once
)
type Singleton struct {
}
func Instance() *Singleton {
once.Do(func() {
instance = &Singleton{}
})
return instance
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Out of their Minds
Dennis Shasha、Cathy Lazere / Springer / 1998-07-02 / USD 16.00
This best-selling book is now available in an inexpensive softcover format. Imagine living during the Renaissance and being able to interview that eras greatest scientists about their inspirations, di......一起来看看 《Out of their Minds》 这本书的介绍吧!