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

网站底部广告搜索引擎优化工具

网站底部广告,搜索引擎优化工具,asp和php网站的区别,米课的wordpressGolang学习笔记_24——泛型 Golang学习笔记_25——协程Golang学习笔记_25——协程 Golang学习笔记_26——通道 文章目录 单例模式1. 介绍2. 应用场景3. 实现3.1 饿汉式3.2 懒汉模式 源码 单例模式 1. 介绍 单例模式是一种创建型设计模式#xff0c;它确保一个类只有一个实例…Golang学习笔记_24——泛型 Golang学习笔记_25——协程Golang学习笔记_25——协程 Golang学习笔记_26——通道 文章目录 单例模式1. 介绍2. 应用场景3. 实现3.1 饿汉式3.2 懒汉模式 源码 单例模式 1. 介绍 单例模式是一种创建型设计模式它确保一个类只有一个实例并提供一个全局访问点来访问这个实例。 这种模式在很多场景下非常有用比如数据库连接池、日志系统等这些场景中我们通常希望在整个应用程序中只有一个对象来负责相关的操作避免资源的浪费和数据的不一致 2. 应用场景 数据库连接池在应用程序中数据库连接的创建和销毁是比较消耗资源的操作。使用单例模式可以确保整个应用程序只有一个数据库连接池实例多个地方需要获取数据库连接时都从这个连接池中获取这样可以有效地管理数据库连接提高性能并节省资源。日志系统一个应用程序通常只需要一个日志记录器来统一记录各种操作信息。单例模式可以保证整个系统只有一个日志记录器实例所有的日志记录操作都通过这个实例来完成方便对日志进行统一管理和配置。配置管理对于应用程序的配置信息如服务器端口号、数据库连接参数等使用单例模式可以确保整个应用程序只有一个配置管理实例这样可以方便地在不同的模块中获取和修改配置信息并且保证配置信息的一致性。 3. 实现 3.1 饿汉式 type Singleton struct{}var singleInstance *Singleton Singleton{}func GetInstance() *Singleton {return singleInstance }func test1() {instance1 : GetInstance()instance2 : GetInstance()fmt.Println(instance1 instance2) }说明 这种方式在程序启动时就初始化了单例实例singleInstance。Singleton{}创建了一个Singleton结构体的实例并将其赋值给singleInstance。 GetInstance函数只是简单地返回这个已经初始化好的实例。这种方式被称为饿汉式因为实例是在程序开始时就 “急切” 地创建好了而不管是否马上会被用到。 优点是实现简单并且在多线程环境下也是安全的因为实例在任何线程访问之前就已经创建好了。 缺点是如果单例的初始化过程很复杂或者资源消耗大可能会导致程序启动变慢。 3.2 懒汉模式 线程不安全 type Singleton struct{}var singleInstance *Singleton // 懒汉式非线程安全 func GetInstance2() *Singleton {fmt.Println(GetInstance2)if singleInstance nil {singleInstance Singleton{}}return singleInstance }func test1() { instance1 : GetInstance() instance2 : GetInstance() fmt.Println(instance1 instance2) } 懒汉式单例模式。在GetInstance函数中首先检查singleInstance是否为nil。如果是就创建一个Singleton结构体的新实例并赋值给singleInstance然后返回这个实例 线程安全 type Singleton struct{}var singleInstance *Singleton// 懒汉式线程安全 var mutex sync.Mutexfunc GetInstance3() *Singleton {fmt.Println(GetInstance3)mutex.Lock()defer mutex.Unlock()if singleInstance nil {singleInstance Singleton{}}return singleInstance }func test1() { instance1 : GetInstance() instance2 : GetInstance() fmt.Println(instance1 instance2) }为了在多线程环境下正确地实现懒汉式单例模式引入了互斥锁sync.Mutex 在GetInstance函数中首先调用mutex.Lock()获取锁这确保了同一时刻只有一个线程能够进入临界区 使用defer mutex.Unlock()可以保证在函数返回之前释放锁。这样即使多个线程同时调用GetInstance函数也能保证只有一个线程会创建singleInstance实例从而保证了单例模式的正确性。 type Singleton struct{}var singleInstance *Singletonvar once sync.Oncefunc GetInstance4() *Singleton {fmt.Println(GetInstance4)once.Do(func() {fmt.Println(just once!)singleInstance Singleton{}})return singleInstance }func test1() { instance1 : GetInstance() instance2 : GetInstance() fmt.Println(instance1 instance2) }once.Do 方法会确保传入的匿名函数只会被执行一次 源码 package singletonimport (fmtsync )type Singleton struct{}// 饿汉式 // var singleInstance *Singleton Singleton{} // 懒汉式直接在程序运行时创建 func GetInstance1() *Singleton {fmt.Println(GetInstance1)return singleInstance }var singleInstance *Singleton// 懒汉式非线程安全 func GetInstance2() *Singleton {fmt.Println(GetInstance2)if singleInstance nil {singleInstance Singleton{}}return singleInstance }// 懒汉式线程安全 var mutex sync.Mutexfunc GetInstance3() *Singleton {fmt.Println(GetInstance3)mutex.Lock()defer mutex.Unlock()if singleInstance nil {singleInstance Singleton{}}return singleInstance }// 使用sync.Once实现 var once sync.Oncefunc GetInstance4() *Singleton {fmt.Println(GetInstance4)once.Do(func() {fmt.Println(just once!)singleInstance Singleton{}})return singleInstance }// 测试方法 func test1() {//instance1 : GetInstance1()//instance2 : GetInstance1()//instance1 : GetInstance2()//instance2 : GetInstance2()//instance1 : GetInstance3()//instance2 : GetInstance3()instance1 : GetInstance4()instance2 : GetInstance4()fmt.Println(instance1 instance2) }
http://www.dnsts.com.cn/news/198513.html

相关文章:

  • 河南网站优化建设山西建站管理系统开发
  • 杭州网站推广技巧推广公司哪里找
  • 查找网站做网站需要注意多少页
  • 工作邮箱认证提额厦门网站搜索引擎优化
  • 网站内部资源推广方法做h5小程序的网站
  • 正规的网站建设工作室设计软件排行榜
  • 深圳人才网站建设找公司做网站需要咨询什么问题
  • 建设网站的好公司百度做直播和短视频网站
  • 哪些网站做的不好用音乐网站网页设计
  • 网站备案怎么关闭网站网站内容方向
  • 北京高端网站建设规划潍坊个人做网站
  • 做照片的ppt模板下载网站怎么自己开发网址
  • 健身房网站的建设情况网站建设与运营课程总结
  • 郑州好的网站建设公司营销策划方案
  • wordpress建站动画建立网站的条件
  • 刘晓忠 网站建设万能浏览器免费下载安装
  • 加盟网站建设案例欣赏公司网站策划方案
  • 网站 成功案例为什么自己做的网站别的电脑打不开
  • 常用的网站开发平台api深圳开发app的公司
  • 网站风格化设计方案wordpress 多图上传
  • 做网站建设月收入多少上海seo排名
  • 装修网站是怎么建设的中英文双语网站
  • 如何伪原创 网站镇江网站建设推广公司
  • 网站被百度降权做动漫主题的网站
  • 如何做征信公司网站钉钉企业主页
  • 你做的网站可视区域多少钱网站评估 源码
  • 秀设计网站平台公司转型发展建议
  • 网站辅助导航网页跳转微信小程序
  • 求一个网站你知道的溧阳市建设局网站6
  • 行业垂直网站开发网站如何快速推广