这是我参与「第五届青训营」伴学笔记创作活动的第 2 天
要点
1.语言进阶 a.从并发编程的视角带大家了解 Go 高性能的本质
2.工程依赖管理 a.了解 Go 语言依赖管理机制
3.单元测试 a.从单元测试实践出发,加强大家的质量意识
4.项目实战 a.通过项目需求、项目拆解、结构设计、代码实现带领大家感受下真实的项目开发
课程1-Go 语言进阶与依赖管理
1.语言进阶
注意事项:
1.并行&并发
a.并发:多线程程序在一个核的cpu上进行,利用时间片段
b.并行:多线程程序在多个核的cpu上运行
c.go可以充分发挥多核优势,高效运行
2.Goroutine
a.协程:用户态,轻量级线程,栈KB级别
b.线程:内核态,线程跑多个协程,栈MB级别
3.CSP(Communicating Sequential processes)
a.提倡通过通信共享内存,而不是通过内存共享而实现通信
b.channel通过make(元素类型,[缓冲大小]);分为有缓存/无缓存【同步】通道
4.实现主程序的阻塞-WaitGroup。使用defer wg.Done()延迟执行wg.Done【函数执行结束之后】
2.依赖管理
注意事项:
Go依赖管理演进
a.GOPATH
项目代码直接依赖src下的代码
go get下载最新版本的包到src目录下
弊端:无法实现package的多版本控制
b.GO Vendor
通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖冲突问题【多版本控制】
弊端:无法控制依赖的版本。更新项目可能又出现依赖错误
c.Go Module
通过go.mod文件管理依赖包版本
中心仓库管理依赖库【Proxy】;依赖分发,稳定可靠
通过go get/ go mod指令工具管理依赖包
注意:依赖选择时,会选择最高的兼容版本;没有必要的情况下,不保存多个版本
课程2-Go 语言工程实践之测试
1.测试
测试的类别
1.回归测试
2.集成测试
3.单元测试【覆盖率变大,且成本逐渐降度】
单元测试规则
1.所有文件以_test.go结尾
2.以func TestXxx(&testing.T)作为测试函数
3.初始化逻辑放到TestMain中
幂等:每次运行结果一样
稳定:单元测试能够相互隔离,不依赖对方
其他两种测试:
1.mock测试:取消测试对文件的强依赖
2.基准测试。Ramdom函数持有全局锁,会降低并发性能
2.项目实战
常用分层结构模型
1.数据层【Repository】:数据Model,外部数据的增删改查
2.逻辑层【Service】:业务ENtity,处理核心业务逻辑输出
3.视图层【Controller】:视图View,处理和外部的交互逻辑