在Go语言中,可以通过如下方法实现单例模式:
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实现了只执行一次的功能,保证了实例只会被创建一次。
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实现了互斥锁,保证了实例的创建和获取是线程安全的。
这两种方法都可以实现单例模式,具体选择哪种方式取决于实际需求和偏好。