Golang设计模式之单例模式
来源:互联网 发布:淘宝 卓诗尼 编辑:程序博客网 时间:2024/06/15 15:05
1. 概述
单例模式,顾名思义就是在程序的运行中只产生一个实力。在Go实现上也有多种形式。
相关源代码demo在Github上,可供参考!
2. 实现
一、懒汉模式.
这种方式实现起来特别简单,直接判断一个实力是不是为nil
, 如果是,则新生成;否则返回已有的。但它和多数语言一样,只适合用在单线程。
type SingleTon struct {}var instance *SingleTonfunc GetInstance() *SingleTon { if Instance == nil { instance = &SingleTon{} } return instance}
二、使用加锁机制
在Go语言中有个基础对象sync.Mutex
,可以实现协程之间的同步逻辑。
var mu sync.Mutexfunc GetInstance() *SingleTon { mu.Lock() defer mu.Unock() if Instance == nil { instance = &SingleTon{} } return instance}
三、 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}
测试代码如下,从运行结果来看,都是一致的。
func main() { for i := 0; i < 10; i++ { go func() { s := GetInstance("test:" + strconv.Itoa(i)) s.TestFunc() }() } time.Sleep(1e5)}
阅读全文
0 0
- Golang设计模式之单例模式
- golang设计模式(1)单例模式
- PHP和golang实现设计模式-单例模式
- 设计模式之 单例设计模式
- 设计模式之 单例设计模式
- 设计模式之单例设计模式
- 设计模式之-----------单例设计模式
- 设计模式之:单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之-单例设计模式
- 设计模式之单例设计模式 标签: 设计模式
- Redis数据类型--Hash(哈希表)
- myeclipse安装svn插件无法显示问题解决
- codeblocks常用快捷键和设置
- tomcat与nginx的不同
- bzoj 5041: LWD的降临
- Golang设计模式之单例模式
- 进程间通信(1)进程及通信需求来源
- 第二周Palindrome Number回文数
- fastdfs分布式文件系统之TrackerServer连接池实现
- redis操作命令
- MD5 加密
- memset用法详解
- 网易云课堂-数据结构-第二讲-线性结构
- 第三周项目四(2)—顺序表的应用