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

上海电商网站建设公司排名网站建设竞争大吗

上海电商网站建设公司排名,网站建设竞争大吗,免费做网站的平台,网络运营具体做什么前言 虽说Golang并不是C、Java这种传统的面向对象语言#xff0c;而是偏向于面向接口编程的语言。但是Golang依旧有接口、结构体、组合等概念去模拟所谓面向对象中非常重要的设计模式。基于面向对象的模型去编写代码往往能编写成高内聚、低耦合、扩展性极强、难出bug的高质量…前言 虽说Golang并不是C、Java这种传统的面向对象语言而是偏向于面向接口编程的语言。但是Golang依旧有接口、结构体、组合等概念去模拟所谓面向对象中非常重要的设计模式。基于面向对象的模型去编写代码往往能编写成高内聚、低耦合、扩展性极强、难出bug的高质量代码结构。 而这个系列主要介绍比较常用的创造型、结构型、行为型设计模式以及Golang中的实现、案例… 什么是单例模式 单例模式是一类经典且简单的设计模式 在单例模式下我们的目的是声明一个类并保证这个类只存在全局唯一的实例供外部反复使用. 而要点简要来讲就是 1.该类在整个运行周期中仅能够被实例化一次 2.该类的实例化对象对外是不可见的且必须自行提供一个公共的访问点供客户端去使用 3.该实例应被自行创建那么符合以上标准那便是一个单例模式的使用 那么其实说到这里大家肯定就会想到在日常工程中很多组件的实例其实就是用了单例模式来初始化的。比如Mysql中间件我们就希望该DB类仅被初始化一次并暴露一个全局的DB供应。又或者系统要求提供一个唯一的序列号生成器或资源管理器或者需要考虑资源消耗太大而只允许创建一个对象。 饿汉模式与懒汉模式 而单例模式的实现又分为了两种分别是饿汉模式与懒汉模式。 饿汉模式 顾名思义饿汉就是说很饿很饿怎么办程序一运行那么就将这个单例去初始化拿到实例不就不饿了么0 ~ 饿汉模式的Golang实现代码Demo 再回顾一下单例模式的标准 1.该类在整个运行周期中仅能够被实例化一次 2.该类的实例化对象对外是不可见的且必须自行提供一个公共的访问点供客户端去使用 3.该实例应被自行创建简单看一下饿汉式 //1、保证这个类非公有化外界不能通过这个类直接创建一个对象 // 那么这个类就应该变得非公有访问 类名称首字母要小写 type singelton struct {}//2、但是还要有一个指针可以指向这个唯一对象但是这个指针永远不能改变方向 // Golang中没有常指针概念所以只能通过将这个指针私有化不让外部模块访问 var instance *singelton new(singelton)//3、如果全部为私有化那么外部模块将永远无法访问到这个类和对象 // 所以需要对外提供一个方法来获取这个唯一实例对象 // 注意这个方法是否可以定义为singelton的一个成员方法呢 // 答案是不能因为如果为成员方法就必须要先访问对象、再访问函数 // 但是类和对象目前都已经私有化外界无法访问所以这个方法一定是一个全局普通函数 func GetInstance() *singelton {return instance }func (s *singelton) SomeThing() {fmt.Println(单例对象的某方法) }func main() {s : GetInstance()s.SomeThing() } 这就是饿汉式一个简单的demo在程序进入main()前instance就已经被实例化了 懒汉模式 而与之对应的就是懒汉模式了。唯一不同之处就是懒汉模式并不会在一开始就去实例化该单例而是在第一次使用到它的时候才会将其初始化并返回。。这就引伸出了一个问题我们如何让这个单例只在第一次被调用的时候而初始化换言之怎么让该实例被初始化的业务代码只能被全局调用一次 而这个问题对熟悉Golang的小伙伴并不是什么难事因为Golang其实有提供sync.once这样一个接口来让某个逻辑只在这个程序中执行一次。 package mainimport (fmtsync )var once sync.Oncetype singelton struct {}var instance *singeltonfunc GetInstance() *singelton {once.Do(func(){instance new(singelton)})return instance }func (s *singelton) DoPrint() {fmt.Println(666) }func main() {s : GetInstance()s.SomeThing() } 当我们使用现成封装好的api时我们应该有刨根问底的心态知其然知其所以然。下面我们简单看看sync.once的底层代码是怎样的。 type Once struct {// 通过一个整型变量标识once 保护的函数是否已经被执行过done uint32// 一把锁在并发场景下保护临界资源 done 字段只能串行访问m Mutex }在 sync.Once 的定义类中 包含了两个核心字段 done一个整型 uint32用于标识用户传入的任务函数是否已经执行过了m一把互斥锁 sync.Mutex用于保护标识值 done 避免因并发问题导致数据不一致(保证线程安全) func (o *Once) Do(f func()) {// 锁外的第一次 check读取 Once.done 的值if atomic.LoadUint32(o.done) 0 {o.doSlow(f)} }func (o *Once) doSlow(f func()) {// 加锁o.m.Lock()defer o.m.Unlock()// double checkif o.done 0 {// 任务执行完成后将 Once.done 标识为 1defer atomic.StoreUint32(o.done, 1)// 保证全局唯一一次执行用户注入的任务f()} }而Do就是让里面的代码能被只执行一次的核心代码块代码很清晰易懂我就不过多赘述主要通过atomic进行原子性的对done这个状态量去变更以及核查值是否变更过来判断该f函数是否被执行过。 总结 以上就是我对单例模式的讲解以及Go实现顺便讲解了一下sync.once底层原理
http://www.dnsts.com.cn/news/119935.html

相关文章:

  • 电子商务网站建设总结wordpress需要Apache吗
  • 网站开发如何共用菜单栏requirego语言怎么搭建网页
  • 自己做传奇网站张家界住房和城乡建设局网站
  • 创新的商城网站建设如何注册一个网站域名备案
  • 高师本科化学实验教学体系建设与创新型人才培养 教学成果奖申报网站慈溪网站建设网站推广
  • 网站新闻被百度收录网站建设课程的感受
  • thinkphp5网站开发公司网站发布流程
  • 网站上的高清图怎么做php网站后台教程
  • 请人做网站注意事项wordpress编辑器自定义按钮
  • 汕头网站建设网站自己制作图片文字图片
  • 常州做网站软件深圳百度网站排名优化
  • 做网站用啥语言WordPress网站hym地图
  • 网站建设信息科技公司潍坊中企动力做的网站怎么样
  • 做网站的步骤视频网站开发涉及到哪些知识产权
  • 苏州网站设计师招聘信息网站建设有哪些困难
  • 做设计的素材网站网站除了做流量还需要什么软件
  • 建站系统wordpress下载生活中的网页设计作品
  • 个人网站的建设参考文献高端网站定制北京
  • 网站建设推广加盟百度seo关键词排名推荐
  • 穷游 网站开发苏州网站制作公司
  • 网站建设与维护 国赛建设网站你认为需要注意哪些问题
  • 网站网站开发设计推广收款码平台有哪些
  • 泉州网站建设科技公司志丹网站建设
  • 高端网站推广企业把网站关闭原因
  • 北京网站制作报价《两学一做 榜样》网站
  • 国家电网网站开发图片素材php企业网站源码
  • 初期网站开发费会计分录和别人做网站接单赚钱
  • 石家庄网站系统开发网站开发维护合同样板
  • 举报不良网站信息怎么做php做网站多少钱
  • 网站开发制作计算器ajax数据库网页网站设计