golang单例模式
文章目录
- 简介
- 懒汉单例
- 懒汉加锁单例
- 懒汉加双重锁
- sync.Once单例(荐)
- 饿汉单例
简介
单例模式,一种很常用的设计模式,特点是:类构造器私有化因为不能被外部构造,拥有自己的类属性,对外暴露获取实例的静态函数
说白了就是返回一个实例出去,但是这个实例是只能内部构造一次,不允许外部构造
懒汉单例
非线程安全。当正在创建时,有线程来访问此时ins = nil就会再创建,单例类就会有多个实例了
type singleton struct{}
var ins *singleton
func GetIns() *singleton{if ins == nil {ins = &singleton{}}return ins
}
懒汉加锁单例
懒汉单例线程不安全,那就加个锁呗,但加锁是要付出一些成本的
type singleton struct{}
var ins *singleton
var mu sync.Mutex
func GetIns() *singleton{mu.Lock()defer mu.Unlock()if ins == nil {ins = &singleton{}}return ins
}
懒汉加双重锁
type singleton struct{}
var ins *singleton
var mu sync.Mutex
func GetIns() *singleton{ if ins == nil {mu.Lock()defer mu.Unlock()if ins == nil {ins = &singleton{}}}
}
sync.Once单例(荐)
sync.Once 是 golang 提供的方法,一旦执行一次,就不再执行
type singleton struct{}
var ins *singleton
var once sync.Once
func GetIns() *singleton {once.Do(func(){ins = &singleton{}})return ins
}
饿汉单例
线程安全,但是如果 singleton 创建初始化比较复杂耗时,加载时间就会较长
type singleton struct{}
var ins *singleton = &singleton{} // 这里可能前置加载时间较耗时,没有后置
func GetIns() *singleton{return ins
}
golang单例模式相关推荐
- golang atomic load 性能_设计模式之Golang单例模式
今天给大家讲下什么是单例模式,以及在Go语言中如何用正确的姿势实现它.其实单例模式是一种在平时开发中经常用到的软件设计模式.在设计模式结构中,其核心是只包含一个被称为单例的特殊类.通过单例模式可以确保 ...
- Golang 单例模式 singleton pattern
在Java中,单例模式的实现主要依靠类中的静态字段.在Go语言中,没有静态类成员,所以我们使用的包访问机制和函数来提供类似的功能.来看下下面的例子: package singletonimport ( ...
- golang 并发同步(sync 库)-- 单例模式的实现(六)
文章目录 golang 单例模式 非线程安全的单例模式 加锁的单例模式 sync.Once 更优雅的方式实现单例模式 更优雅的方式防止主 go 程提前退出 sync.Cond--golang 指挥家 ...
- 深入理解Golang 编程思维和工程实战
| 导语 Golang 的一些编程思维和思想,以及总结一些常见的优雅编程实战技巧 目录 一 Golang 编程思维 二 Golang 高级编码技巧 1 优雅的实现构造函数编程思想 2 优雅的实现继承编 ...
- Golang 编程思维和工程实战
Golang 的一些编程思维和思想,以及总结一些常见的优雅编程实战技巧. 作者:allendbwu,腾讯 PCG 后台开发工程师 一 Golang 编程思维 首先,我们先来看下最基本的,就是 Gola ...
- 一)golang的单例模式
在23种设计模式中,单例模式作为最普遍运用的设计模式之一,在软件开发中起着非常重要的地位. 应用场景:对资源单一且有严格控制的场景,例如. 数据库连接类 对象:可一次创建,一直使用的类 在golang ...
- golang实现单例模式
golang实现单例模式 go已经提供了实现单例模式的工具sync.Once 示例 借用sync.Once的一次性特点 import ("sync" )type singleton ...
- GoLang设计模式之单例模式
文章目录 GoLang设计模式之单例模式 1.单例模式概念 2.单例模式优点 3.单例模式应用实例 4.单例模式使用场景 5.单例模式实现方式 6.懒汉模式 6.1概念 6.2不加锁实现 6.3整个方 ...
- golang mysql单例模式_Golang设计模式——单例模式
要点:sync.Once 的应用 高并发场景下读写锁 package singleton import "sync" var ( p *Pet once sync.Once ) ...
最新文章
- Loadrunner手动关联详解
- php中mvc代表什么意思,php mvc是什么意思?
- Explaining the Genesis Block in Ethereum
- php图片上传方案,php图片上传
- 数字图像处理之图像基础
- Java用TCP手写聊天室 可以 私聊版加群聊版
- linux 新建用户、用户组 以及为新用户分配权限
- Ruby Variable Scope 简单讲解
- Maven实战读书笔记(3)
- android问题:Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
- 项目管理:项目进度优化策略
- 英文IT电子书下载:www.foxebook.net
- Springboot整合支付宝支付(沙箱)
- SATA、mSATA 、PCIe和M.2——SSD硬盘的接口详解
- python怎么表达我喜欢你的句子_20句暗示“我喜欢你”的告白句子,句句触动人心...
- 错误数据(图片)去除
- App和小程序开发成本对比
- JavaIO—Day21
- mysql扣减库存_扣库存之mysql方案讨论
- 网络设备丢弃ECN包导致的慢响应问题
热门文章
- 第65篇:探索顶级APT后门Sunburst的设计思路(修正篇)Solarwinds供应链攻击中篇...
- 问题解决:fastjson 迁移至gson 反序列化错误,看这篇就够!
- 最好的php短信验证,[怎么实现短信验证]php实现短信验证
- java 编辑我的世界_“我的世界 (Minecraft)”Java版和 RTX 版的世界转换教程
- C++ 模拟键鼠详细总结
- 【JavaScript 教程】浏览器—CORS 通信
- 第十四届浙江财经大学程序设计竞赛重现赛 ——A
- CSS 鼠标悬停按钮效果
- 马尔科夫链(Markov Chain)
- html垂直军中,数字报纸HTML版本