Golang 单例模式
单例模式是一种最基本的设计模式,属于创造模式的一种。在应用了单例模式的时候,类的实例在全局中只会存在一个。实例也只会被创建一次。通常用于系统只需要拥有一个全局对象的时候。例如数据库连接对象。
单例模式分为懒汉和饿汉模式两种。
首先是饿汉模式:
1 |
|
在包初始化的过程中就完成了对象的初始化工作,然后调用函数直接返回实例对象即可。
但是由于是在导入包的过程中初始化对象,会造成加载时间过长。
然后就是懒汉模式,懒汉模式是在实际调用时才会去创建对象的实例。
1 |
|
在判断实例变量为nil
时,才会去创建对象。但是直接这样写会带来并发上的问题。如果多个 goroutine 调用方法,会创建出多个实例来。因此为了保障并发安全,可以对其中的逻辑进行加锁的操作。
但是在 Go 中还有另外的一种方式,那就是借助 once.Do
来实现
1 |
|
使用 Once.Do,既保证了对象会被初始化一次,也保证了并发下只创建一个对象。
因此,如果需要在 Go 中应用单例模式,那么最好的选择就是使用 Once.Do 方法。
Golang 单例模式
https://blog.zhangliangliang.cc/post/golang-singleton-parttern.html