GO语言进阶与依赖
并发和并行:
-
并发:
-
多个任务在同一时间段内交替执行,但不一定同时执行。在单核CPU上,操作系统通过时间片轮转等方式让多个任务看起来是同时进行的。
-
示例
:
-
-
并行:
-
多个任务在多个核的CPU上同时执行,真正实现了同时性。
-
示例
:
-
线程和协程:
协程:用户级,轻量态,kb级别
线程:内核级,线程跑多个协程,栈MB级别
实现线程协程:
go中提倡通过共享内存来实现通信
解决生产者消费者不均匀的问题
因为生产者的任务一般都比较简单,做得快,而消费者的任务比较复杂,久而久之,就会浪费生产者的效率
这样有缓存通道的话生产者的就可以生产完先放在哪里去干别的事
go也可以通过共享内存来实现多线程
go的依赖管理分类:
gopath:
项目代码直接依赖src下的代码
然后go get下载最新的版本的包到src目录下
弊端:
A和B依赖于某一package的不同版本
gopath无法实现多版本的控制
goVender:
他就是创建一个文件夹,里面保存了所有依赖的副本,每当你要用到哪个依赖的时候,他会优先从vender文件夹里面找里面没有的话就会子啊去从gopath中寻找
弊端:
如果依赖的一个文件v1和v2版本有冲突的话,他有不能正常工作了
go mould:
通过go.mod文件管理依赖包版本
通过go get 、go mod指令工具管理工具依赖包
最终目的就是通过定义版本规则和管理项目依赖关系
依赖管理的三要素:
1.配置文件,描述依赖 go.mod
2.中心长裤管理依赖库 Proxy
3.本地工具 go get/mod
go.mod依赖配置方法
版本定义的两种规则:
会选择最新的版本,也就是c 1.4
版本定义规则
-
语义化版本:
-
版本号格式为
MAJOR.MINOR.PATCH
。 -
规则
:
- MAJOR:不兼容的API变更。
- MINOR:向后兼容的功能添加。
- PATCH:向后兼容的bug修复。
-
-
版本约束:
-
^
:允许次版本和补丁版本的升级。 -
~
:允许补丁版本的升级。 -
示例
:
luarequire ( github.com/some/package ^1.0.0 github.com/another/package ~2.1.3 )
-