Go语言工程实践(并发&测试) | 青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
第二节课——Go语言工程实践
一、语言进阶——从并发编程了解Go高性能本质
-
并发&并行
Go可以充分发挥多核优势,高效运行——为并发而生;
- 多线程程序在一个核的cpu上运行——并发(利用时间片的切换来提高)
- 多线程程序在多个核的cpu上运行——并行
-
Goroutine
协程:用户态,轻量级线程,栈MB级别
线程:内核态,线程跑多个协程,栈KB级别
Go开多个协程的方法——调用函数时在该函数前+关键字
go即开一个协程 -
CSP
提倡通过通信共享内存,而不是通过共享内存而实现通信
-
Channel——引用类型
由make(chan 元素类型,[缓冲大小])来创建
-
无缓冲通道——make(chan int)
-
有缓冲通道——make(chan int 2)
-
-
并发安全——+🔒(Lock)
-
WaitGroup——协程间的同步
二、依赖管理——GoMoudle实践
-
Go依赖管理
GOPATH——Go Vendor——Go Moudle
不同环境依赖版本不同
-
GOPATH
环境变量——bin、pkg(编译的中间产物)、src(项目源码)
项目直接依赖src代码
go get要下载最新的包在src下
-
Go Vendor
增加vender文件夹,所有依赖包在vender有副本,解决了多个项目需要同一个package
-
Go Moudle
通过go.mod文件管理依赖包版本
通过go get/go mod指令工具管理依赖包
-
-
依赖管理三要素
- 配置文件、描述依赖——go.mod
- 中心仓库管理依赖库——Proxy
- 本地工具——go get/mod
-
依赖配置——依赖图
-
依赖分发——回源
Proxy
Go Proxy是一个服务站点,他会缓存源站中的软件内容,缓存的软件版本不会改变,切在源站删除后依然可以使用,从而实现依赖分发
-
工具——go get
-
工具——go mod
三、测试——单元测试、Mock测试、基准测试
-
测试是避免事故的最后一个屏障
- 回归测试——QA,通过手动测试终端回归一些固定主流程场景
- 集成测试——系统功能维度做测试验证
- 单元测试——对单独的函数、模块做功能验证,层级从下至上,测试代码成本逐渐降低,测试覆盖率逐步上升
-
单元测试
四、项目实践——需求设计、代码开发、测试运行
需求描述
社区话题页面
- 展示话题(标题,文字)和回帖
- 一个本地web服务
- 话题和回帖用文件存储
E-R图
分层结构
数据层关联底层数据模型(model),数据存储在本地文件,通过文件操作拉取话题,帖子数据
数据层面向逻辑层,对service层透明,屏蔽下游数据差异
service逻辑层计算打包业务实体entiy,对应我们的需求,并上送给视图层
Controller视图层以view视图形式返回给客户端,对于我们的需求,封装json格式化的请求结果,api的形式访问

浙公网安备 33010602011771号