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

桓台县建设局网站网站开发职业

桓台县建设局网站,网站开发职业,吉林网站seo,男的做那个视频网站GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…

GO系列

1、GO学习之Hello World
2、GO学习之入门语法
3、GO学习之切片操作
4、GO学习之 Map 操作
5、GO学习之 结构体 操作
6、GO学习之 通道(Channel)
7、GO学习之 多线程(goroutine)
8、GO学习之 函数(Function)
9、GO学习之 接口(Interface)
10、GO学习之 网络通信(Net/Http)
11、GO学习之 微框架(Gin)
12、GO学习之 数据库(mysql)
13、GO学习之 数据库(Redis)
14、GO学习之 搜索引擎(ElasticSearch)
15、GO学习之 消息队列(Kafka)
16、GO学习之 远程过程调用(RPC)
17、GO学习之 goroutine的调度原理
18、GO学习之 通道(nil Channel妙用)
19、GO学习之 同步操作sync包
20、GO学习之 互斥锁、读写锁该如何取舍
21、GO学习之 条件变量 sync.Cond
22、GO学习之 单例模式 sync.Once

文章目录

  • GO系列
  • 前言
  • sync.Once 如何使用

前言

按照公司目前的任务,go 学习是必经之路了,虽然行业卷,不过技多不压身,依旧努力!!!
sync.Once又是什么呢?某个 goroutine 只需要且只能执行一次,到目前为止我们知道程序运行期间只被执行一次的就是每个包的 init 函数,sync包也提供了这样一种更灵活的机制,可以保证 任意一个函数 在程序运行期间只被执行一次,就是 sync.Once了。

sync.Once 如何使用

在 JAVA 开发中,Spring 框架使用了 单例模式 来创建实体 Bean,我们在开发中也是多用单例模式来避免实例的重复创建。
在 Go 标准库中,sync.Once 的 “仅仅执行一次” 的特性被多用于初始化操作或者是资源清理的过程中,以避免重复执行导致性能不是最佳。
sync.Once 的语义十分适合实现单例模式(singleton)模式,并且实现起来也和简单,如下获取实例的例子:

package mainimport ("log""sync""time"
)// 定义一个结构体对象
type Entity struct{}var once sync.Once// 声明一个接口实例,用于存放实例
var instance *Entityfunc GetFun(id int) *Entity {// 延迟获取异常信息defer func() {e := recover()if e != nil {log.Printf("goroutine %d catch a panic: %s \n", id, e)}}()log.Printf("goroutine %d start run... \n", id)// once.Do 真正的执行创建实体操作once.Do(func() {instance = &Entity{}time.Sleep(3 * time.Second)log.Printf("goroutine %d create instance : %p\n", id, instance)panic("success to create a instance")})return instance
}func main() {var wg sync.WaitGroupfor i := 0; i < 5; i++ {wg.Add(1)go func(i int) {inst := GetFun(i)log.Printf("goroutine %d get a instance: %p", i, inst)wg.Done()}(i + 1)}time.Sleep(5 * time.Second)inst := GetFun(0)log.Printf("goroutine %d get a instance: %p", 0, inst)wg.Wait()log.Printf("all goroutine done \n")
}

运行结果:

PS D:\workspaceGo\src\sync> go run .\sync_once_main.go
2023/12/02 16:17:04 goroutine 5 start run... 
2023/12/02 16:17:04 goroutine 2 start run...
2023/12/02 16:17:04 goroutine 1 start run...
2023/12/02 16:17:04 goroutine 3 start run...
2023/12/02 16:17:04 goroutine 4 start run...
2023/12/02 16:17:07 goroutine 5 create instance : 0xa477c0
2023/12/02 16:17:07 goroutine 5 catch a panic: success to create a instance
2023/12/02 16:17:07 goroutine 5 get a instance: 0x0
2023/12/02 16:17:07 goroutine 3 get a instance: 0xa477c0
2023/12/02 16:17:07 goroutine 2 get a instance: 0xa477c0
2023/12/02 16:17:07 goroutine 4 get a instance: 0xa477c0
2023/12/02 16:17:07 goroutine 1 get a instance: 0xa477c0
2023/12/02 16:17:09 goroutine 0 start run... 
2023/12/02 16:17:09 goroutine 0 get a instance: 0xa477c0
2023/12/02 16:17:09 all goroutine done

从运行结果中我们可以观察到,sync.Do 会等待 func() 执行完毕才返回,在这期间其他的执行 once.Do 函数的 goroutine(如上述例子的 goroutine 1 ~ 4) 将会阻塞等待。
等 goroutine 5 的 sync.Do 执行完后,其他的 goroutine 在调用 sync.Do 时将不再执行里面的 func() 并立即返回(如 goroutine 0)。
我们还可以观察到,即便在函数 func() 中出现 panic, sync.Once 依旧认为 once.Do 执行完毕,其他 goroutine 调用 once.Do 将不再执行 func() 。


现阶段还是对 Go 语言的学习阶段,想必有一些地方考虑的不全面,本文示例全部是亲自手敲代码并且执行通过。
如有问题,还请指教。
评论去告诉我哦!!!一起学习一起进步!!!

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

相关文章:

  • seo网站分析报告企业网站建设公司网络服务
  • 民宿设计网站大全cms做网站不用后端
  • 网站建设路由器怎么设置新浪网页编辑器
  • 南山网站设计线go网站开发
  • 淘宝客怎么做的网站推广关于网站策划的文章
  • html网站设计范例百度权重排名高的网站
  • 深圳市网站建设平台江苏国龙翔建设公司网站
  • 东莞高端网站设计开发网站需要怎么做
  • 喀什哪有做网站的图片类网站欣赏
  • 苏州新区城乡建设网站集团logo设计公司
  • 德州宁津网站建设网站打开后显示建设中
  • 清徐县建设局网站wordpress nexus主题
  • html5企业网站 源码建设网站有哪些参考文献
  • 权威的深圳网站推广网站建设哪些公司
  • 潼南集团网站建设宁波网页制作设计营销
  • 北京做网站建设的公司排名html网页代码成品
  • 企业网站内容贵阳网站设计阳光创信好吗
  • 郑州做网站优化地址wordpress授权破解
  • 网站被攻击空间关了怎么办在线制作动画网站
  • 网站模仿侵权有什么做设计接任务的网站
  • 学校网站建设需求分析调研表万网域名
  • 域名注册人怎么查询六安做网站seo
  • 建设植绒衣架网站上海微信网站建设价格
  • 广东外贸网站推广公司wordpress 3d
  • 投放广告网站网页实现方案
  • 最简单的电子商务网站建设代码深圳极速网站建设推荐
  • 洛阳霞光网络建站公司网时代教育培训机构
  • 四川住房和城乡建设厅网站官网招聘网站做销售
  • 可用的ftp网站怎么做营销型网站设计
  • 网站搭建十大品牌公司清溪做网站的电话