Go語言中的單例模式可以通過以下幾種方式來實現:
package singleton
type singleton struct {
// ...
}
var instance *singleton
func init() {
instance = &singleton{
// ...
}
}
func GetInstance() *singleton {
return instance
}
package singleton
import "sync"
type singleton struct {
// ...
}
var instance *singleton
var once sync.Once
func GetInstance() *singleton {
once.Do(func() {
instance = &singleton{
// ...
}
})
return instance
}
package singleton
import "sync"
type singleton struct {
// ...
}
var instance *singleton
var mutex sync.Mutex
func GetInstance() *singleton {
mutex.Lock()
defer mutex.Unlock()
if instance == nil {
instance = &singleton{
// ...
}
}
return instance
}
這些實現方法都可以保證只有一個實例對象,并且在需要使用該對象時提供統一的訪問入口。