单例模式是常用的设计模式,但在golang里和c++/java等实现的方式略有不同,非常干净利落!来,上代码:
import "sync"
var once sync.Once
var awsMeta *MetaDb
func DefaultAWSMetaDb() *MetaDb {
once.Do(func() {
awsMeta, _ = NewMetaDb(AWS, TestConsulAddress)
})
return awsMeta
}
int main() {
meta1 := DefaultAWSMetaDb()
meta2 := DefaultAWSMetaDb()
meta3 := DefaultAWSMetaDb()
// 上面的三个meta,使用同一个meta地址
}
once.Do()只会运行一次,是不是很棒!Have fun!
有疑问加站长微信联系(非本文作者)