go 语言中的单例讨论

最近在学习go语言,也想通过写设计模式的方式来学习

package designPattern

import "sync"

type singleton struct {
}

var single *singleton
var once sync.Once

func GetInstance() *singleton {
	once.Do(func() {
		single = &singleton{}
	})
	return single
}

这种代码充斥在网络上,设计有些把struct定义为Singleton包外可以访问,这些明显都是存在问题的。

在包外是需要通过GetInstance()方法来获取到singleton的引用,是有单例的效果。

但是在package内部,实际上是没办法实现单例的,因为可以实例化来创建,single = &singleton{}

所以我理解go的原生其实并没有很好的支持这个理论,在stackoverflow上也有人是这样来质疑的

本次只是记录下这个问题,希望以后能有一个确切的结论

posted @ 2019-02-15 21:03  卡卡西sir  阅读(99)  评论(0)    收藏  举报