Golang工程进阶|青训营笔记

51 阅读2分钟

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

一、语言进阶

1.并发vs并行

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

2.Goroutine

协程:用户态,轻量级线程,栈kb级(线程:内核态,线程跑多个协程,栈mb级)

image.png

3.CSP

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

4.Channel

二、依赖管理

背景:学会站在巨人的肩膀上,利用他人封装或者研发好的工具来提升自己的开发效率

image.png 工程项目不可能基于标准库0~1编码搭建

管理依赖库

Go依赖管理演进:GOPATH->Go Vendor->Go Module

不同环境(项目)依赖的版本不同;控制依赖库的版本

GOPATH:

image.png 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实践

三、测试

避免测试的最后屏障

回归测试

集成测试

单元测试

从上到下,覆盖率逐渐变大,成本却逐层变低

四、项目实战

需求设计

代码开发

image.png 测试运行