golang设计模式 单例模式

90 阅读1分钟

1、描述

保证一个类只有一个实例,全局有唯一接口访问

2、实现

1)懒汉模式:

type Singleton struct {}
var instance *Singleton
var mutex sync.Mutex
func GetInstance() *Singleton {
	if instance == nil {
		mutex.Lock()
		defer mutex.Unlock()
		if instance == nil {
			instance = new(Singleton)
		}
	}
	return instance
}

2)饿汉模式:

type Singleton struct {}
var instance *Singleton = new(Singleton)
func GetInstance() *Singleton {
	return instance
}

3)sync.Once

type Singleton struct {}
var instance *Singleton
var once sync.Once
func GetInstance() *Singleton {
	once.Do(func (){
		instance = new(Singleton)
	})
	return instance
}