golang单例模式怎么实现

avatar
作者
猴君
阅读量:0

Go语言中的单例模式可以通过以下几种方式来实现:

  1. 使用全局变量:定义一个全局变量,在需要使用单例对象的地方直接使用该全局变量。在包的初始化函数中创建并初始化该变量。
package singleton  type singleton struct {     // ... }  var instance *singleton  func init() {     instance = &singleton{         // ...     } }  func GetInstance() *singleton {     return instance } 
  1. 使用sync.Once实现懒汉模式:使用sync.Once来保证只能创建一个对象,通过一个函数获取该对象。
package singleton  import "sync"  type singleton struct {     // ... }  var instance *singleton var once sync.Once  func GetInstance() *singleton {     once.Do(func() {         instance = &singleton{             // ...         }     })     return instance } 
  1. 使用sync.Mutex实现饿汉模式:使用sync.Mutex来保证只能创建一个对象,通过一个函数获取该对象。
package singleton  import "sync"  type singleton struct {     // ... }  var instance *singleton var mutex sync.Mutex  func GetInstance() *singleton {     mutex.Lock()     defer mutex.Unlock()     if instance == nil {         instance = &singleton{             // ...         }     }     return instance } 

这些实现方法都可以保证只有一个实例对象,并且在需要使用该对象时提供统一的访问入口。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!