阅读量:0
在Go语言中,可以通过如下方法实现单例模式:
- 基于sync.Once实现的单例模式:
package singleton import "sync" type singleton struct{} var instance *singleton var once sync.Once func GetInstance() *singleton { once.Do(func() { instance = &singleton{} }) return instance }
在这个例子中,通过sync.Once实现了只执行一次的功能,保证了实例只会被创建一次。
- 基于sync.Mutex实现的单例模式:
package singleton 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 }
在这个例子中,通过sync.Mutex实现了互斥锁,保证了实例的创建和获取是线程安全的。
这两种方法都可以实现单例模式,具体选择哪种方式取决于实际需求和偏好。