1. 单例模式 #
单例模式采用了 饿汉式 和 懒汉式 两种实现,饿汉式的实现,简单,并且可以将问题及早暴露,懒汉式虽然支持延迟加载,并没有本质上解决问题,并且为了实现懒汉式还不可避免的需要加锁。
1.1 饿汉式 #
package singleton
// Singleton 饿汉式单例
type Singleton struct {
a string // 测试字段
}
var singleton *Singleton
func init() {
singleton = &Singleton{a: "test"}
}
// GetInstance 获取实例
func GetInstance() *Singleton {
return singleton
}
1.2 懒汉式 #
package singleton
import "sync"
var (
lazySingleton *Singleton
once = &sync.Once{}
)
// GetLazyInstance 懒汉式
func GetLazyInstance() *Singleton {
// once 内的方法只会执行一次,所以不需要再次判断
once.Do(func() {
lazySingleton = &Singleton{a: "test"}
})
return lazySingleton
}