这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天。
一、语言进阶
并发:多线程程序在一个核的cpu上运行。并行:多线程程序在多个核的cpu上运行。
Go 可以充分发挥多核优势,高效运行。
线程:用户态,轻量级线程,栈MB级别。
协程:内核态,线程跑多个协程,栈KB级别。
小结:
这个章节包括三个方面,一个是协程,通过高效的调度模型实现高并发操作,一个是通道channel,通过通信实现共享内存,最后sync相关关键字,实现并发安全操作和协程间的同步。
二、依赖管理
GOPATH
GOPATH是Go语言支持的一个环境变量,value是Go项目的工作区。目录有以下结构:src:存放Go项目的源码;pkg:存放编译的中间产物,加快编译速度;bin:存放Go项目编译生成的二进制文件。
弊端:如果多个项目依赖同一个库,则依赖该库是同一份代码,所以不同项目不能依赖同一个库的不同版本,这很显然不能满足我们的项目依赖需求。
Go Vendor
-
项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor
-
依赖寻址方式: vendor => GOPATH
通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。
弊端:1. 无法控制依赖的版本。2.更新项目又可能出现依赖冲突,导致编译出错。
Go Module
-
通过go.mod文件管理依赖包版本
-
通过go get/go mod 指令工具管理依赖包
-
定义版本规则和管理项目依赖关系
依赖管理三要素
1.go.mod——配置文件,描述依赖。
2.Proxy——中心仓库管理依赖库。
3.go get/mod——本地工具。
总结
通过对本次课程的学习,既了解了GO高性能的本质,又了解了GO语言依赖的演进路线,对GO语言有了更进一步的认识。