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

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是同一个对象。


http://www.kler.cn/a/546407.html

相关文章:

  • 【算法专场】哈希表
  • ai智能电话机器人话术处理,呼叫系统部署语音话术设置
  • C++之线程池(Thread Pool)
  • django上传文件
  • AI会话问答的页面滚动处理(参考deepseek页面效果)
  • 怎么让DeepSeek自动化写作文案
  • 基于opencv的HOG+角点匹配教程
  • Day1 25/2/14 FRI
  • 执行js生成json文件并动态写入数据
  • HTTP请求报文头和相应报文头
  • 深入探索C语言中的字符串处理函数:strstr与strtok
  • 科研绘图系列:R语言绘制地图和山脊图(map ridge plot)
  • LVS集群(DR/NAT)
  • 知识拓展:设计模式之装饰器模式
  • 【docker知识】快速找出服务器中占用内存较高的容器
  • 我的新书《青少年Python趣学编程(微课视频版)》出版了!
  • sql调优之数据库开发规范
  • vite让每个scss文件自动导入某段内容
  • uniapp实现首行首列冻结效果
  • 能源物联网数据采集网关 多协议对接解决方案
  • 代码随想录算法营Day38 | 62. 不同路径,63. 不同路径 II,343. 整数拆分,96. 不同的二叉搜索树
  • ICLR2022 | IAA | 从数据分布的角度重新思考对抗转移性
  • Qt接入deepseekv3 API 提供openssl 1.1.1g安装包
  • win11 MBR 启动 如何把我的硬盘改 GPT win11 的 UEFI 启动
  • Vulhub靶机 ActiveMQ任意 文件写入(CVE-2016-3088)(渗透测试详解)
  • 使用爬虫获取1688商品分类:实战案例指南