go之单例模式

简介: go之单例模式

一、代码实现

import (
  "fmt"
  "sync"
  "testing"
  "unsafe"
)
 
type Singleton struct {
}
 
var singLeInstance *Singleton
var once sync.Once
 
//单例模式
func GetSingletonObj() *Singleton {
  //仅运行一次
  once.Do(func() {
    fmt.Println("Create Obj")
    singLeInstance = new(Singleton)
  })
  return singLeInstance
}
 
func TestGetSingletonObj(t *testing.T) {
  var wg sync.WaitGroup
  for i := 0; i < 10; i++ {
    wg.Add(1)
    go func() {
      obj := GetSingletonObj()
      fmt.Printf("%x\n", unsafe.Pointer(obj))
      wg.Done()
    }()
 
  }
  wg.Wait()
}
=== RUN   TestGetSingletonObj
Create Obj
4beac8
4beac8
4beac8
4beac8
4beac8
4beac8
4beac8
4beac8
4beac8
4beac8
--- PASS: TestGetSingletonObj (0.00s)
PASS
相关文章
|
3月前
|
安全 测试技术 Go
|
3月前
|
设计模式 Java Go
什么是Go 中的单例模式?
本文介绍了Go语言中的单例设计模式,包括饿汉式与懒汉式两种实现方式。饿汉式单例在程序启动时即完成实例化,适用于不需延迟加载的情况;通过全局变量初始化确保实例唯一性。懒汉式单例采用延迟初始化策略,在首次请求时创建实例,适合资源消耗较大的场景;利用双重检查锁定机制保证多线程环境下的安全性。两种模式各有优劣,开发者应根据实际需求选择合适的实现方案。
|
4月前
|
设计模式 安全 Java
聊聊 Go 中的单例模式
**摘要:** 单例模式确保类只有一个实例,提供全局访问点。Go中实现单例有饿汉式和懒汉式。饿汉式在程序启动时创建实例,如: ```go var Instance = new(singleton) ``` 懒汉式首次需要时创建,使用双重检查锁定模式确保线程安全: ```go if instance == nil { mutex.Lock() if instance == nil { instance = new(singleton) } mutex.Unlock() } ``` 饿汉式简单但可能浪费资源,懒汉式延迟初始化但需处理并发。
53 0
|
6月前
|
设计模式 安全 测试技术
[设计模式 Go实现] 创建型~单例模式
[设计模式 Go实现] 创建型~单例模式
|
设计模式 存储 缓存
Go 语言实现创建型设计模式 - 单例模式
Go 语言实现创建型设计模式 - 单例模式
70 1
|
设计模式 Java Go
Go实现设计模式之单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式常用于需要共享资源或控制资源访问的场景,例如数据库连接池、线程池等。
280 0
|
存储 设计模式 安全
一起学习 Go 语言设计模式之单例模式(上)
单例模式很容易记住。就像名称一样,它只能提供对象的单一实例,保证一个类只有一个实例,并提供一个全局访问该实例的方法。
一起学习 Go 语言设计模式之单例模式(上)
|
设计模式 缓存 网络协议
Go设计模式(6)-单例模式
前面5篇文章讲解了设计模式的语法、面向对象分析、原则、代码编写、类图表示法,从本文开始讲述23种设计模式。
|
设计模式 缓存 Java
一起学习 Go 语言设计模式之单例模式(下)
单例模式很容易记住。就像名称一样,它只能提供对象的单一实例,保证一个类只有一个实例,并提供一个全局访问该实例的方法。