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

晋城建设局官方网站怎么制作一个免费的网站模板

晋城建设局官方网站,怎么制作一个免费的网站模板,什么设计师前景最好,南京玄武网站建设前言 单例模式是常用的一种设计模式,一般用于比如客户端、连接的创建等,防止创建多个导致性能消耗。所以我认为单例模式的核心,就是“防止重复”。本文将在Golang中进行单例模式的实现。 实现 版本1——检测-创建 最基础的版本&#xff0…

前言

单例模式是常用的一种设计模式,一般用于比如客户端、连接的创建等,防止创建多个导致性能消耗。所以我认为单例模式的核心,就是“防止重复”。本文将在Golang中进行单例模式的实现。

实现

版本1——检测-创建

最基础的版本,就是依照“防止重复”来实现。代码如下:

package maintype Test1 struct {
}var t1 *Test1func main() {}func NewT1() *Test1 {if t1 == nil {t1 = &Test1{}}return t1
}

可见,只是在创建前,进行了一个判定,如果为空 再创建。不为空则直接返回。

但是这样版本存在有问题——即线程不安全。比如多个goroutine中同时运行其去创建,那么就很容易导致创建重复。

对此,解决方案也很简单——加锁即可。

版本2——加锁-检测-创建

很简单粗暴的加个锁——这样就能保证只有一个去进行检测、创建。规避了问题。

var mutex sync.Mutexfunc NewT1() *Test1 {mutex.Lock()defer mutex.Unlock()if t1 == nil {t1 = &Test1{}}return t1
}

但是这样带来了新的问题:频繁的加锁、删锁,带来了巨大的性能损耗。诸如t1已经存在的情况,本该直接返回即可,但是却需要白白加锁一次。

版本3——检测-加锁-检测-创建

即所说的Check-Lock-Check模式。代码如下:


func NewT1() *Test1 {if t1 == nil {mutex.Lock()defer mutex.Unlock()if t1 == nil {t1 = &Test1{}}}return t1
}

可以看到,就是在最开始的lock之前,进行一次检测。一个if判断的消耗还是很小的,如果存在再进入加锁创建的流程。

在Golang中,可以使用sync/atomic这个包,原子化的加载一个标志,来实现这套判断。
即:

import "sync"
import "sync/atomic"var initialized uint32
... // 此处省略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
}
//此代码直接复制至原文——https://www.liwenzhou.com/posts/Go/singleton/

版本4——Golang常用的方式

饿汉和懒汉式

饿汉

饿汉模式,即像一个饿肚子人一样迫不及待的去享用美食。即 在程序加载的时候就创建并实例化,因此也无需考虑并发等情况。

示例:

package mainimport "fmt"type Singleton struct {// 在这里定义单例对象的属性
}var instance *Singleton = createInstance()func createInstance() *Singleton {// 在这里创建并初始化单例对象return &Singleton{// 初始化单例对象的属性}
}func GetInstance() *Singleton {return instance
}func main() {// 使用单例模式获取实例singletonInstance := GetInstance()// 使用单例实例fmt.Println(singletonInstance)
}
//此代码复制自原文——https://i6448038.github.io/2023/12/16/singleton/

懒汉

顾名思义,懒得管…等用到时候再创建。此时程序已经启动并正在运行,此时创建实例可能会出现多线程的情况,所以要考虑并发问题。

上述的实现代码便是懒汉模式。

参考资料

https://www.liwenzhou.com/posts/Go/singleton/

https://i6448038.github.io/2023/12/16/singleton/

http://www.yayakq.cn/news/359241/

相关文章:

  • 同步wordpress站点企业网站设计 优帮云
  • 和女的做那个视频网站个人怎么申请营业执照
  • 龙岩网站推广教育直播网站开发
  • 电商网站建设与管理 教案2017优秀网站设计
  • 做发包业务网站做网站一般字号要做多少
  • 哪个网站做海报好html5 微网站
  • 官网网站设计网站拉圈圈接口怎么做
  • 制作网站需要多少时间网站建设 回本
  • 国有企业网站建设wordpress 文章加图片
  • 凡客诚品网站设计贺州市住房和城乡建设局网站
  • 专业网站设计开发网站长春商城网站开发
  • 福建省住房城乡和城乡建设厅网站大庆市网站建设
  • 太原网站制作推广郑州微信网站开发
  • 山东做网站找谁dedecms视频网站模板
  • 网站登录密码怎么取消保存济南做网站推广有哪些公司
  • 网站做统计分析新站快速收录技术
  • 一般做外贸上什么网站好友汇网网站建设
  • 网站开发知识视频专门做网站的公司有哪些
  • 怎么做二维码直接进入网站新品发布会ppt参考
  • 图书馆网站建设工作wordpress官网中文版下载
  • 企业型网站有哪些特点网络推广标题技巧
  • 网站运营是什么意思营销案例分析报告模板
  • 北京seo工程师WordPress seo终极优化
  • 计算机网络网站开发网站建设需要花多少钱
  • 网站开发国内外研究状况网站登录账号密码保存在哪里
  • 网站开发 后端服务培训网站官网
  • 江苏省建设协会网站徐州市城乡和城乡建设厅网站首页
  • 台州网站优化方案wordpress社交媒体优化
  • wordpress修改手机端幻灯片seo平台优化服务
  • 网站没有设置关键词wordpress ldap登陆