【发布时间】:2020-06-08 10:58:44
【问题描述】:
我想用 Go 实现一个单例。普通单例的区别在于实例是单例,在映射结构中具有不同的键。像这样的代码。我不确定演示代码是否存在任何数据竞争。
var instanceLock sync.Mutex
var instances map[string]string
func getDemoInstance(key string) string {
if value, ok := instances[key]; ok {
return value
}
instanceLock.Lock()
defer instanceLock.Unlock()
if value, ok := instances[key]; ok {
return value
} else {
instances[key] = key + key
return key + key
}
}
【问题讨论】: