这是我参与「第五届青训营 」笔记创作活动的第2天,今天主要学习了Go语言开发项目的流程以及实践中需要注意的问题。
01并发-并行
Go可以充分发挥多核优势,高效运行。
协程:用户态,轻量级线程,栈KB级别。
线程:内核态,线程跑多个协程,栈MB级别。
Go语言一次可以创建上万个协程。
1.1 Goroutine
创建协程。
1.2 CSP (Communication Sequential Processes)
Go提倡通过通信共享内存而不是通过共享内存而实现通信。
1.3 Channel
make(chan 元素类型,[] )
无缓冲通道 make(chan int)
有缓冲通道 make(chan int,2)
1.4 并发安全 Lock
并发安全有一定概率影响结果。
1.5 Wait Group
Sync包下的Wait Group实现并发任务同步。
02 依赖管理
学会站在巨人的肩膀上。
2.1依赖管理演进
1)GOPATH
问题:无法实现package的多版本控制。
2)Go Vendor
解决了多个项目需要同一个package依赖的冲突问题。
弊端:无法控制依赖的版本。更新项目又可能出现以来冲突,导致编译出错。
3)Go Module
定义版本规则和管理项目依赖关系。
2.2 依赖管理三要素
1.配置文献,描述依赖。 go.mod
2.中心仓库管理依赖库。Proxy
3.本地工具。go get/mod
2.3 go.mod
2.3.1依赖配置 - go.mod
2.3.2 依赖配置 - version
语义化版本
基于commit伪版本
2.3.3 依赖配置- indirect
A->B->C
A->B直接依赖
A->C间接依赖
2.3.4 依赖配置- imcompatible
主版本2+模块会在模块路径增加/vN后缀。
对于没有go.mod文件并且主版本2+的依赖,会+incompatible
2.3.4 依赖配置-依赖图
2.3.5 依赖分发-回源
无法保证构建稳定性
无法保证依赖可用性
增加第三方压力
依赖分发 -Proxy
稳定+可靠
2.3.6 依赖分发 - 变量 GOPROXY
2.3.7 - go get
2.3.8 - go mod
1)init 初始化,创建go.mod文件
download 下载模块到本地缓存
tidy 增加需要的依赖,删除不需要的依赖
2)依赖管理三要素
1.配置文件,描述依赖 go.mod
2.中心仓库管理依赖库 Proxy
3.本地工具 go get/mod
03测试
1)回归测试
2)集成测试
3)单元测试
测试单元的输出和期望进行校对,
规则
所有测试文件以_test.go结尾
func TestXxx(*testing.T)
初始化逻辑放到TestMain中
覆盖率
一般覆盖率:50%~60%,较高覆盖率80%。
测试分支相互独立,全面覆盖。
测试单元粒度足够小,函数单一职责。
外部依赖=》稳定&幂等
文件处理-Mock
基准测试
04项目实践
过程
需求描述
项目拆解
代码设计
测试运行
day2总结
课程的节奏还是很快的。今天的课程主要讲解了实践中项目需要注意的问题,Go语言特性对项目的中的运用,项目测试的重要性及常用方法,项目实践的四个步骤。Go语言多协程的特性保证了项目的高效性;对依赖管理了解熟悉了Go语言对项目逐渐完善的过程,形成了Go Module的管理关系;实际开发中测试是必不可少的,集中讲解了测试的常用方法;最终拆解了掘金一般文章项目的整个需求,并对其分析了整个项目实践的过程。今天的课程主要是对项目方面的讲解,对Go语言实践开发有很大帮助。