这是我参与「第五届青训营 」笔记创作活动的第1天
GO并发编程
- GO协程是轻量级的,运行于用户态
- 协程间通信:CSP,通过通信共享内存/通过共享内存实现通信(加锁,竞态问题)
- Channel:
无缓冲通道
make(chan int)同步
有缓冲通道make(chan int, 2)类似生产消费模型,带缓冲的channel能解决生产者消费者之间处理速度差异 - 安全并发Lock
GO中锁类型
sync.Mutex - WaitGroup
类型
sync.WaitGroup
依赖管理
- 三种方式 GOPATH:无法实现package的多版本控制 Vendor:无法控制以依赖版本,更新项目可能又出现依赖冲突 Go Module:通过go.mod文件依赖管理包版本,通过go get/go mod指令工具管理依赖包
- 依赖管理三要素 配置文件,描述依赖:go.mod 中心仓库管理依赖库:Proxy 本地工具:go get/mod
测试
- 三种测试方式:单元测试->集成测试->回归测试
- 单元测试规则:所有文件以_test.go结尾,测试函数
func TextXXX(*testing.T),初始化逻辑放在TestMain中
func TestMain(m *testing.M){
//测试前:数据装配、配置初始化等前置工作
code := m.Run()
//测试后:释放资源等收尾工作
os.Exit(code)
}
覆盖率:函数运行行和总体之间的比值
Mock:对函数打桩测试,不再依赖本地文件
func Patch(target, replacement interface{}) *PatchGuard {...}
func Unpatch(target interface{}) bool {}
3. 基础测试:优化代码,需要对当前代码进行分析;内置测试框架提供了基准测试的能力
话题页面项目
-
数据类型: Topic结构体:用于描述话题对象,包括id,title,content,create_time Post结构体:用于描述帖子信息:包括id,topic_id,content,create_time
-
项目层次结构 数据层:对底层数据的处理,提供统一接口 逻辑层:处理核心业务逻辑输出 视图层:处理和外部的交互
-
组件工具:Gin(高性能go web框架),Go Mod