Golang设计模式-单例模式
Golang单例模式实现 go语言做开始的必然是并发业务,所谓的单例模式也必须加锁否则会不断生成新的实例,不加锁的部分就不写了. 直接记录几个能用的到的单例模式,由浅入深. 懒汉加锁模式 package pattern import "sync" type singleton struct{} var instance *singleton var mu sync.Mutex //获取实例 func GetInstance() *singleton { //这种结构的单例模式,会导致每次都加锁,严重浪费性能 mu.Lock() defer mu.Unlock() if instance == nil { instance = &singleton{} } return instance } 懒汉双重锁检测模式 package pattern import "sync" //单例模式 type singleton struct{} var instance *singleton var mu sync.Mutex //获取实例 func GetInstance() *singleton { //不会导致每次都加锁,因为率先判断了随后才加的锁 //如果没有被实例化 if instance == nil { //加锁 mu.Lock() //实例化返回,并解锁 defer mu