Day2 学习笔记 | 青训营

59 阅读2分钟

语言进阶之并发编程

类别权限状态量级栈大小
协程用户态轻量级栈KB
线程内核态线程跑多个协程栈MB
  • 提倡通过通信共享内存而不是通过共享内存实现通信
  • 创建格式make(chan deltype, [buffersize]),后一个参数控制缓冲通道的大小,0参为无缓冲通道
  • 使用lock实现并发同步
  • 使用WaitGroup进行阻塞

依赖管理

  • 演变:GOPATH->GO Vendor->GO MODULE
  • 环境变量 $GOPATH bin为二进制文件 pkg为中间代码 src为源代码 问题是无法实现package的多版本控制
  • 项目目录下存放vendor,每个项目引入一份依赖的副本 问题是无法控制依赖的版本,更新项目可能出现冲突
  • go.mod通过go get和go mod指令工具管理依赖包,可以定义版本规则
  • goproxy依赖分发 GOPROXY="url1,url2,direct"
  • go mod本地命令 init初始化 download下载模块 tidy增加需要的依赖,删除不需要的

测试(单元测试、Mock测试、基准测试)

回归测试、集成测试、单元测试 覆盖面更广成本更低

单元测试

  • 测试文件以_test.go结尾
  • func TestXxx(t *testing.T)
  • 初始化逻辑放到TestMain中
  • 使用--cover测试代码覆盖率,一般覆盖率50%-60%,测试分支相互独立,全面覆盖

Mock测试

开源Mock库 github.com/bouk/monkey
对函数进行打桩测试,不再依赖本地文件

基准测试

项目实战

实现一个社区话题页面(不使用前端页面和数据库)

  • 使用分层结构:数据Model 逻辑Entity 视图View
  • 涉及到的组件工具:Gin 高性能go web框架
go mod init
go get gopkg.in/gin-gonic/gin.v1@v1.3.0

学习心得

协程并发与通信同步是非常重要的功能,go mod init和tidy功能非常常用,在构建实际项目的过程中可以经常使用来简化配置,本节课程的内容还是非常丰富的,也需要我们花费比较多的时间来学习,尤其是项目实际构建和设计,项目拆解,测试运行等内容也为后面设计大项目打下基础。