这是我参与「第五届青训营」伴学笔记创作活动的第2天。本篇为第五届字节跳动青训营-寒假专场-后端基础课程的笔记。
语言进阶
主要学习并发编程。
- 并发:单核多线程
- 并行:多线程在多核CPU上运行
- 协程:用户态,轻量级协程,栈MB级别。
- 线程:内核态,线程跑多个协程,栈KB级别。
例子:快速打印hello goroutine:0-4,输出结果无顺序。
Go提倡通过通信共享内存,主要利用channel。
make(chan int) # 无缓冲,有阻塞作用
make(chan int, 2) # 有缓冲
例子:计算平方
A子协程发送0-9数字;B子协程计算输入数字的平方;主协程输出最后的平方数。带缓冲的chan可以解决生产效率与消费速度不均衡的问题。
并发安全lock:加锁稳定输出,不加锁输出未知结果。应避免共享内存时使用非语法安全的读写操作。
waitgroup:add计数器,done计数器-1,wait阻塞直到计数器为0。
依赖管理
gopath-govender-gomodule。
gopath:项目代码直接依赖src下的代码;无法实现package的多版本控制。
govender:每个项目引入一个依赖的副本,解决了多个项目需要同一个package的多版本问题。但会存在不兼容问题。
gomodule:通过go.mod文件管理依赖包版本。
- 配置文件,描述依赖:go.mod
- 中心仓库管理依赖库:proxy
- 本地工具:go get/mod
测试
- 回归测试:回归特地场景
- 集成测试:针对功能
- 单元测试:单个函数模块
项目实战
- 需求设计
- 代码开发
- 测试运行
获取话题信息与回帖信息,是并行的,并没有先后顺序,协程实现。