第二节笔记 Go语言入门(并发、依赖) | 青训营笔记

122 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。

并发 & 并行

 Go可以充分发挥多核优势,高效运行。

Goroutine

image.png

这里老师的PPT文字有误。

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

Channel

  • 利用缓冲,解决生产和消费的速度不均衡带来的消费问题
    • 生产快
    • 消费慢

并发安全 Lock

并发安全问题不加锁产生的数据是未知的。

WaitGroup

 将协程加入WaitGroup,可以很好的进行管理。


Go 依赖管理演进

GOPATH

  • 环境变量 $GOPATH
  • 项目代码直接依赖src下的代码
  • go get下载最新版本的包到src目录下

弊端:无法实现package的多版本控制

Go Vendor

  • 项目目录下增加vendor文件,所有依赖包副本形式放在 $ProjectRoot/vendor
  • 依赖寻址方式:vendor => GOPATH

通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。

弊端:

  • 无法控制依赖的版本
  • 更新项目又可能出现依赖冲突,导致编译出错

Go Module

  • 通过go.mod文件管理依赖包版本
  • 通过go get/go mod指令工具管理依赖包

终极目标:定义版本规则和管理项目的依赖关系

依赖管理三要素

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

小结

既有项目

  • 在项目目录下执行go mod init,生成一个go.mod文件。
  • 执行go get,查找并记录当前项目的依赖,同时生成一个go.sum记录每个依赖库的版本和哈希值。

新项目

  • 执行go mod init项目名命令,在当前项目文件夹下创建一个go.mod文件。
  • 手动编辑go.mod中的require依赖项或执行go get发现、维护依赖。