文章目录

  • 简介
  • 懒汉单例
  • 懒汉加锁单例
  • 懒汉加双重锁
  • 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单例模式相关推荐

  1. golang atomic load 性能_设计模式之Golang单例模式

    今天给大家讲下什么是单例模式,以及在Go语言中如何用正确的姿势实现它.其实单例模式是一种在平时开发中经常用到的软件设计模式.在设计模式结构中,其核心是只包含一个被称为单例的特殊类.通过单例模式可以确保 ...

  2. Golang 单例模式 singleton pattern

    在Java中,单例模式的实现主要依靠类中的静态字段.在Go语言中,没有静态类成员,所以我们使用的包访问机制和函数来提供类似的功能.来看下下面的例子: package singletonimport ( ...

  3. golang 并发同步(sync 库)-- 单例模式的实现(六)

    文章目录 golang 单例模式 非线程安全的单例模式 加锁的单例模式 sync.Once 更优雅的方式实现单例模式 更优雅的方式防止主 go 程提前退出 sync.Cond--golang 指挥家 ...

  4. 深入理解Golang 编程思维和工程实战

    | 导语 Golang 的一些编程思维和思想,以及总结一些常见的优雅编程实战技巧 目录 一 Golang 编程思维 二 Golang 高级编码技巧 1 优雅的实现构造函数编程思想 2 优雅的实现继承编 ...

  5. Golang 编程思维和工程实战

    Golang 的一些编程思维和思想,以及总结一些常见的优雅编程实战技巧. 作者:allendbwu,腾讯 PCG 后台开发工程师 一 Golang 编程思维 首先,我们先来看下最基本的,就是 Gola ...

  6. 一)golang的单例模式

    在23种设计模式中,单例模式作为最普遍运用的设计模式之一,在软件开发中起着非常重要的地位. 应用场景:对资源单一且有严格控制的场景,例如. 数据库连接类 对象:可一次创建,一直使用的类 在golang ...

  7. golang实现单例模式

    golang实现单例模式 go已经提供了实现单例模式的工具sync.Once 示例 借用sync.Once的一次性特点 import ("sync" )type singleton ...

  8. GoLang设计模式之单例模式

    文章目录 GoLang设计模式之单例模式 1.单例模式概念 2.单例模式优点 3.单例模式应用实例 4.单例模式使用场景 5.单例模式实现方式 6.懒汉模式 6.1概念 6.2不加锁实现 6.3整个方 ...

  9. golang mysql单例模式_Golang设计模式——单例模式

    要点:sync.Once 的应用 高并发场景下读写锁 package singleton import "sync" var  ( p *Pet once sync.Once ) ...

最新文章

  1. Loadrunner手动关联详解
  2. php中mvc代表什么意思,php mvc是什么意思?
  3. Explaining the Genesis Block in Ethereum
  4. php图片上传方案,php图片上传
  5. 数字图像处理之图像基础
  6. Java用TCP手写聊天室 可以 私聊版加群聊版
  7. linux 新建用户、用户组 以及为新用户分配权限
  8. Ruby Variable Scope 简单讲解
  9. Maven实战读书笔记(3)
  10. android问题:Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
  11. 项目管理:项目进度优化策略
  12. 英文IT电子书下载:www.foxebook.net
  13. Springboot整合支付宝支付(沙箱)
  14. SATA、mSATA 、PCIe和M.2——SSD硬盘的接口详解
  15. python怎么表达我喜欢你的句子_20句暗示“我喜欢你”的告白句子,句句触动人心...
  16. 错误数据(图片)去除
  17. App和小程序开发成本对比
  18. JavaIO—Day21
  19. mysql扣减库存_扣库存之mysql方案讨论
  20. 网络设备丢弃ECN包导致的慢响应问题

热门文章

  1. 第65篇:探索顶级APT后门Sunburst的设计思路(修正篇)Solarwinds供应链攻击中篇...
  2. 问题解决:fastjson 迁移至gson 反序列化错误,看这篇就够!
  3. 最好的php短信验证,[怎么实现短信验证]php实现短信验证
  4. java 编辑我的世界_“我的世界 (Minecraft)”Java版和 RTX 版的世界转换教程
  5. C++ 模拟键鼠详细总结
  6. 【JavaScript 教程】浏览器—CORS 通信
  7. 第十四届浙江财经大学程序设计竞赛重现赛 ——A
  8. CSS 鼠标悬停按钮效果
  9. 马尔科夫链(Markov Chain)
  10. html垂直军中,数字报纸HTML版本