How singleton pattern works with Golang | by Jefferson Otoni Lima | Golang Issue | Medium Go 言語における Singleton Pattern | text.Baldanders.info
よくやるやつ
なにも考えずにつくるとこうなる
var instance *Config
func GetInstance() *Config {
if instance == nil {
instance = &Config{}
}
return instance
}
これはスレッドセーフではないので、instanceの生成処理に時間がかかる場合にgoroutineなどで同時にアクセスすると、 複数回生成実行される
⇒ Singletonでない
解決策
sync.Once
か sync.Mutex
を使うといい
var instance *Config
var once sync.Once
func GetInstance() *Config {
once.Do(func() {
instance = NewConfig()
})
return instance
}