当前位置: 首页 > news >正文

Go语言实现单例模式

单例模式

        单例模式分为饿汉和懒汉模式,前者是在程序启动的时候就初始化一个单例对象,后者是使用到这个单例的时候,才会初始化一个单例对象。

饿汉模式

package main

import "fmt"

type Singleton struct {
}

var instance *Singleton = &Singleton{}

func GetInstance() *Singleton {
	return instance
}
func main() {
	s1 := GetInstance()
	s2 := GetInstance()
	fmt.Printf("%p\n", s1)
	fmt.Printf("%p\n", s2)
}

懒汉模式

package main

import (
	"fmt"
	"sync"
)

type Singleton struct {
}

var instance *Singleton
var once sync.Once

func GetInstance() *Singleton {
	once.Do(func() {
		instance = &Singleton{}
	})
	return instance
}
func main() {
	s1 := GetInstance()
	s2 := GetInstance()
	fmt.Printf("%p\n", s1)
	fmt.Printf("%p\n", s2)
}

打印出来的地址值是一样的,说明s1和s2是同一个对象。

相关文章:

  • 【k8s应用管理】kubernetes 安全机制
  • 内容测试2
  • 微软AutoGen介绍——Managing State保存并加载持续会话的Agents和Teams
  • docker Desktop安装WSL --update报错问题
  • 科普:数据仓库中的“指标”和“维度”
  • 选择排序
  • 用nginx正向代理https网站
  • 面向对象程序设计-实验七
  • java下载多个JDK版本,debian12
  • Linux下MySQL的简单使用
  • 寻找两个有序数组的中位数
  • 一文了解zookeeper
  • Node.js HTTP模块详解:创建服务器、响应请求与客户端请求
  • Sora平替|有言AI数字人视频生成工具“极简实操”
  • arduino扩展:Arduino Mega 控制 32 个舵机(参考表情机器人)
  • 【Map vs Set】:Java数据存储的“双子星”对决
  • RabbitMQ配置SSL证书
  • 在 Crates.io 上发布 Crate 的全流程指南
  • C++ 完美转发:泛型编程中的参数无损传递
  • 为AI聊天工具添加一个知识系统 之103 详细设计之44 自性三藏 之4 祖传代码 之2
  • 美国务卿与以色列总理通话,讨论加沙局势
  • 《五行令》《攻守占》,2个月后国博见
  • 爬坡难下坡险,居民出行难题如何解?
  • 时隔三年,俄乌直接谈判重启
  • 中国恒大披露清盘进展:要求债权人提交债权证明表
  • 车主质疑零跑汽车撞车后AEB未触发、气囊未弹出,4S店:其把油门当刹车