GO语言进阶 | 青训营笔记

46 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天。 go语言可以充分发挥多核优势,高速运行 线程:内核态,线程跑多个协程,栈KB级别 协程:用户态,轻量级线程,栈MB级别

协程

go关键字开启协程

CSP 协程通过通信共享内存 Channel 传递数据 无缓冲通道 缓冲通道 并行安全 Lock WaitGroup Wait阻塞

go管理依赖库

GOPATH bin编译/pkg编译中间文件/src项目源码 无法实现package的多版本控制 GO Vendor 增加一份依赖的副本 依赖冲突 Go Module go.mod文件管理依赖包版本 go get 指令巩固管理依赖包 go.mod 文件结构 go版本管理规则 语义化版本 基于commit伪版本 -时间戳 -哈希码 indirect 间接依赖 +incompatible v2版本以上

go依赖管理三要素

gomod 配置文件 中心管理仓库 Proxy 本地工具 go get/mod

对于同一依赖的不同版本,编译时选择最低的兼容版本

依赖分发 go.proxy 保证依赖的稳定可靠

image.png

go mod init 初始化,创建go.mod 文件 download下载模块到本地缓存 tidy 增减依赖

测试

测试避免事故最后一道屏障 回归测试-集成测试-单元测试,覆盖率逐层变大,成本逐层降低

单元测试

保证质量,提升效率

  1. 测试文件以_test.go结尾
  2. func TestXxx(*testing.T)
  3. 初始化逻辑放在TestMain中 覆盖率 一般覆盖率 50%-60%, 测试分支相互独立、全面覆盖 测试单元粒度足够小,函数单一职责

单元测试-依赖 幂等&稳定

文件处理 单元测试——Mock 快速Mock函数 为一个函数打桩 为一个方法打桩

项目实践

社区话题页面 1.展示话题 2.本地web服务 3.话题和回帖数据用文件存储

数据层Repository-业务层Service-视图层controller