Go实现单例模式
1、概念
单例模式:一个只允许创建一个实例的类叫做单例类,这种模式称为单例模式。
2、作用
类的实例具有全局唯一性,适用于一些场景,如管理配置的类,写log的类等,这种类只需要一个全局的实例来共享资源,无需创建多个实例,单例模式有利用节约资源、防止多个实例产生冲突。
3、实现例子
package singleton import ( "fmt" "sync" ) var ( lock sync.Mutex instance *singleton ) type singleton struct { Data int name string } func (s *singleton) String() string { return fmt.Sprintf("singleton data:%v, name:%v", s.Data, s.name) } // 懒汉式 func NewSingleton(data int, name string) *singleton { if instance == nil { lock.Lock() // 双重判断 if instance == nil { instance = &singleton{ Data: data, name: name, } } lock.Unlock() } return instance } // 饿汉式 var SingletonInstance *singleton = &singleton{2, "饿汉"}
总结:在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。