这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、语言进阶
1.并发vs并行
Go语言可以充分发挥多核优势,高效运行
2.Goroutine
协程:用户态,轻量级线程,栈kb级(线程:内核态,线程跑多个协程,栈mb级)
3.CSP
提倡通过通信共享内存而不是通过共享内存而实现通信
4.Channel
二、依赖管理
背景:学会站在巨人的肩膀上,利用他人封装或者研发好的工具来提升自己的开发效率
工程项目不可能基于标准库0~1编码搭建
管理依赖库
Go依赖管理演进:GOPATH->Go Vendor->Go Module
不同环境(项目)依赖的版本不同;控制依赖库的版本
GOPATH:
GOPATH-弊端:无法实现package的多版本控制
Go Vendor:项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor
依赖寻址方式:vendor=>GOPATH
通过每个项目引入一份依赖副本,解决了多个项目需要同一个package依赖的冲突问题
Go Vendor-弊端:无法控制依赖的版本;更新项目又可能出现依赖冲突
Go Module:通过go.mod文件管理依赖包版本
通过go get/go mod指令工具管理依赖包
终极目标:定义版本规则和管理项目依赖关系
依赖管理三要素:
1.配置文件,描述依赖 go.mod
2.中心仓库管理依赖库 Proxy
3.本地工具 go get/mod
Go Module实践
三、测试
避免测试的最后屏障
回归测试
集成测试
单元测试
从上到下,覆盖率逐渐变大,成本却逐层变低
四、项目实战
需求设计
代码开发
测试运行