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

go语言设计模式-单例模式

建造型设计模式-单例模式

是用来控制类型实例的数量的,当需要确保一个类型只有一个实例时,就需要使用单例模式。

即把实例的访问进行收口,不能谁都能 new 类,所以单例模式还会提供一个2访问该实例的全局端口,一般都会命名个 GetInstance之类的函数用作实例访问的端口。

由创造但单例的时间,单例模式分为饿汉模式懒汉模式

饿汉模式

饿汉模式适用于系统初始化时创建已经确定的类型实例,如数据库实例。

使用go语言的init函数实现。

package dao
// 饿汉式单例
// 注意定义非导出类型
type  databaseConn struct{...
}var dbConn *databaseConnfunc init() {dbConn = &databaseConn{}
}// GetInstance 获取实例
func Db() *databaseConn {return dbConn
}

懒汉模式

懒汉模式是延迟加载的模式,适合程序执行过程中条件成立才创建加载的类型实例。

要考虑并发环境下,判断实例是否已经创建时,是不是用的当前读。

在go语言中采用原子操作atomic.Loadatomic.Store去读写这个状态变量

import "sync"
import "sync/atomic"var initialized uint32type singleton struct {...
}func GetInstance() *singleton {if atomic.LoadUInt32(&initialized) == 1 {  // 原子操作 return instance}mu.Lock()defer mu.Unlock()if initialized == 0 {instance = &singleton{}atomic.StoreUint32(&initialized, 1)}return instance
}
http://www.lryc.cn/news/269667.html

相关文章:

  • 超维空间S2无人机使用说明书——51、基础版——使用yolov8进行目标跟踪
  • Transformer(seq2seq、self-attention)学习笔记
  • 2023-12-29 服务器开发-centos部署ftp
  • 螺旋数字阵(100%用例)C卷 (JavaPythonNode.jsC语言C++)
  • AUTOSAR从入门到精通-网络通信(UDPNm)(二)
  • 显示器与按键(LCD 1602 + button)
  • 2020年认证杯SPSSPRO杯数学建模B题(第一阶段)分布式无线广播全过程文档及程序
  • 【CISSP学习笔记】7. 安全评估与测试
  • Gateway集成方法以及拦截器和过滤器的使用
  • 第G2周:人脸图像生成(DCGAN)
  • 【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞
  • python3遇到Can‘t connect to HTTPS URL because the SSL module is not available.
  • QSPI Flash xip取指同时program过程中概率性出现usb播歌时断音
  • MySQL聚簇索引和非聚簇索引的区别
  • 【C#】蜗牛爬井问题C#控制台实现
  • IP地址的四大类型:动态IP、固定IP、实体IP、虚拟IP的区别与应用
  • Linux Debian12安装和使用ImageMagick图像处理工具 常见图片png、jpg格式转webp格式
  • JavaScript二
  • JavaScript系列——正则表达式
  • 命令行创建Vue项目
  • 01.PostgreSQL基本SELECT语句
  • UDP信号多个电脑的信息传输测试、配置指南
  • 先序+中序还原二叉树【数据结构】
  • 【全网首发】洛谷P2678 [NOIP2015 提高组] 跳石头
  • Gpt指引ubuntu安装java8/11
  • 【MCAL】TC397+EB-tresos之MCU配置实战 - 芯片时钟
  • 最新AI系统ChatGPT网站H5系统源码,支持AI绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图
  • 如何在MAC OS中的XCODE下添加 <bits/stdc++.h>
  • Maven项目提示Ignored pom.xml问题
  • SQL学习汇总