Go语言进阶与依赖管理 | 青训营笔记

164 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

Go语言进阶与依赖管理 | 青训营笔记

1.1 Goroutine

  • 协程(Goroutine):用户态,轻量级线程,栈KB级别
  • 线程:内核态,线程跑多个协程,栈MB级别

image.png

1.2 CSP(Communicating Sequential Processes)

提倡通过通信共享内存而不是通过共享内存而实现通信

image.png

1.3 Channel

make(chan 元素类型, [缓冲大小])

  • 无缓冲通道 make(chan int)
  • 有缓冲通道 make(chan int, 2)

image.png

1.4 并发安全(LOCK)

通过对临界区资源访问权限的控制,来保证并发的安全

1.5 WaitGroup

计数器:开启协程+1;执行结束-1;主协程阻塞直到计数器为0。

2.1 依赖管理

GOPATH → Go Vendor → Go Module

  • 不同环境(项目)依赖的版本不同
  • 控制依赖库的版本
  1. GOPATH弊端:无法实现package的多版本控制,如同一个src文件下,代码A使用了Pkg V1,代码B使用了Pkg V2,此时可能导致冲突
  2. Go Vendor:项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor,依赖的寻址方式为vendor => GOPATH
    • 优点:通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。
    • 弊端:无法控制依赖的版本,更新项目又可能出现依赖冲突,导致编译出错。
  3. Go Moudle:通过go.mod文件管理依赖包版本,通过go get/go mod指令工具管理依赖包,其终极目标为定义版本规则和管理项目依赖关系。

2.2 依赖管理三要素

  1. 配置文件,描述依赖 go.mod
  2. 中心仓库管理依赖库 Proxy
  3. 本地工具 go get/mod

2.3 依赖分发-Proxy

image.png

2.4依赖分发-变量GOPROXY

GOPROXY = "https://proxy1.cn, https://proxy2.cn, direct" —— 服务站点URL列表, "direct"表示源站

image.png

2.5 工具——go.get

image.png

2.6 工具——go mod

image.png