GO语言进阶和依赖管理 | 青训营
语言进阶
1.0并发Vs并行
并发:多线程程序在一个核的CPU上运行
并行:多线程程序在多个核的CPU上运行
GO可以发挥多核优势,高效运行
1.1Goroutine
协程:用户态,轻量级线程,栈KB级别
线程:内核态,线程跑多个协程,栈MB级别
协程的使用
快速打印hello groutine:0~hello goroutine:4
在调用函数func(j int)前加go这就可以为一个函数创建一个协程来运行
time.sleep(time.second)是为了保证子协程在执行完之前主协程不退出
1.2CSP
协程之间的通信
提倡通过通信共享内存而不是通过共享内存实现通信
通过共享内存实现通信在一定程度上会影响程序的性能
1.3Channel
make(chan 元素类型,[缓冲大小])
无缓冲通道 make(chan int)
有缓冲通道 make(chan int,2)
Channel的使用
A 子协程发送0~9数字
B 子协程计算输入数字的平方
M 主协程输出最后的平方数
带缓冲的channel可以解决生产和消费速度带来的执行效率问题
1.4并发安全 Lock
对变量执行2000次 1操作,5个协程并发执行
对比加锁和不加锁两种情况的输出
加锁讲的是对临界区的权限的一个控制来保证并发安全
1.5waitGroup
go语言中可通过waitgroup实现并发任务的同步
计数器
开启协程 1;执行结束-1;主程序阻塞直到计数器为0
快速打印hello groutine:0~hello goroutine:4
依赖管理
2.0背景
工程项目不可能基于标准库0~1编码搭建
管理依赖库
2.1GO依赖管理演进
不同环境(项目)依赖的版本不同;控制依赖库的版本
2.1.1 GOPATH
环境变量$GOPATH
bin 项目编译的二进制文件
pkg 项目编译的中间产物
src 项目源码
项目代码直接依赖src下的代码
go get 下载最新版本的包到src目录下
GOPATH的弊端
V2无法兼容,无法实现package的多版本控制
2.1.2 GO Vender
项目目录下增加vender文件,所有依赖包副本形式放在$projectroot/vender
依赖寻址方式:vender——GOPATH
通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题
GO Vender的弊端
无法控制的版本
更新项目又可能出现依赖冲突,导致编译错误
依赖的是项目源码,不能清晰的标识依赖版本
2.1.3 GO Module
通过go.mod文件管理依赖包版本
通过go get/go mod指令工具管理依赖包
终极目标:定义版本规则和管理项目依赖关系
2.2依赖管理三要素
1.配置文件,描述依赖 go.mod
2.中心仓库管理依赖库 Proxy
3.本地工具 go get/mod
2.3.1依赖配置-go.mod
依赖标识[Module Path] [Version/Pseudo-version]
2.3.2 依赖配置-version
1.语义化版本:MAJOR(可以不兼容).{MAJOR(可以不兼容)}.{MINOR(在minor下做到前后兼容)}.${PATHE}
2.基于commit伪版本:版本前缀-时间戳—12位哈吉马前缀
2.3.3依赖配置-indirect
A-B-C
A-B直接依赖
A-C间接依赖
没有直接依赖用indirect标识出来
2.3.4依赖配置-incompatible
主版本V2 模块会在模块路径增加/vN后缀
对于没有go.mod文件并且主版本V2 的依赖,会 incompatible
v1.4
选择最低的兼容版本
2.3.5 依赖分发-回源
无法保证构建的稳定性(加,改,删);无法保证依赖的可用性(删除软件);增加第三方压力
Proxy
2.3.6依赖分发-变量 GOPROXY
Proxy1——Proxy2——Direct(源站)
2.3.7工具-go get
2.3.8工具-go mod
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhaiae
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13