本文共 694 字,大约阅读时间需要 2 分钟。
golang中实现单例模式非常简单,那就是使用指针对象。
根据对象的实例化时间,可以分为饿汉式和懒汉式。
对象
type Person struct { Name string Age int}
并发测试
func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { ins := GetInstance() fmt.Printf("%p\n", ins) wg.Done() }() } wg.Wait()}
直接创建好对象,这样不需要判断为空,同时也是线程安全。唯一的缺点是在导入包的同时会创建该对象,并持续占有在内存中。
1、直接调用
var Ps = &Person{ "raoxiaoya", 12}
2、间接调用
var ps = &Person{ "raoxiaoya", 12}func GetInstance() *Person { return ps}
对象只有在调用GetInstance方法的时候才会实例化,节省资源。
var ps *Personvar once sync.Oncefunc GetInstance() *Person { once.Do(func(){ ps = &Person{ "raoxiaoya", 12} }) return ps}
如果不加once,那么每次调用GetInstance都会给ps赋值不同的对象。
转载地址:http://zcaui.baihongyu.com/