文章目录
GoLang设计模式之单例模式
注:本文基于Go SDK v1.8进行讲解
1.单例模式概念
2.单例模式优点
3.单例模式应用实例
4.单例模式使用场景
5.单例模式实现方式
6.懒汉模式
6.1概念
6.2不加锁实现
package one
type singleton struct {
}
var instance *singleton
func GetInstance() *singleton {
if instance == nil{
instance = new(singleton)
}
return instance
}
6.3整个方法加锁
type singleton struct {
}
var instance *singleton
var lock sync.Mutex
func GetInstance() *singleton {
lock.Lock()
defer lock.Unlock()
if instance == nil{
instance = new(singleton)
}
return instance
}
6.4创建方法时进行锁定
type singleton struct {
}
var instance *singleton
var lock sync.Mutex
func GetInstance() *singleton {
if instance == nil{
lock.Lock()
instance = new(singleton)
lock.Unlock()
}
return instance
}
6.5双重检锁
type singleton struct {
}
var instance *singleton
var lock sync.Mutex
func GetInstance() *singleton {
if instance == nil{
lock.Lock()
if instance == nil{
instance = new(singleton)
}
lock.Unlock()
}
return instance
}
6.6原子操作实现
type singleton struct {
}
var instance *singleton
var once sync.Once
func GetInstance() *singleton {
once.Do(func() {
instance = new(singleton)
})
return instance
}
7.饿汉模式
7.1概念
7.2全局变量实现、init加载实现
type singleton struct {
}
var instance = new(singleton)
func GetInstance() *singleton{
return instance
}
type singleton struct {
}
var instance *singleton
func init() {
instance = new(singleton)
}
func GetInstance() *singleton{
return instance
}