GO语言进阶笔记 | 青训营笔记

63 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第1天

GO并发编程

  1. GO协程是轻量级的,运行于用户态
  2. 协程间通信:CSP,通过通信共享内存/通过共享内存实现通信(加锁,竞态问题)
  3. Channel: 无缓冲通道 make(chan int) 同步
    有缓冲通道 make(chan int, 2)类似生产消费模型,带缓冲的channel能解决生产者消费者之间处理速度差异
  4. 安全并发Lock GO中锁类型sync.Mutex
  5. WaitGroup 类型 sync.WaitGroup

依赖管理

  1. 三种方式 GOPATH:无法实现package的多版本控制 Vendor:无法控制以依赖版本,更新项目可能又出现依赖冲突 Go Module:通过go.mod文件依赖管理包版本,通过go get/go mod指令工具管理依赖包
  2. 依赖管理三要素 配置文件,描述依赖:go.mod 中心仓库管理依赖库:Proxy 本地工具:go get/mod

测试

  1. 三种测试方式:单元测试->集成测试->回归测试
  2. 单元测试规则:所有文件以_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. 基础测试:优化代码,需要对当前代码进行分析;内置测试框架提供了基准测试的能力

话题页面项目

  1. 数据类型: Topic结构体:用于描述话题对象,包括id,title,content,create_time Post结构体:用于描述帖子信息:包括id,topic_id,content,create_time

  2. 项目层次结构 数据层:对底层数据的处理,提供统一接口 逻辑层:处理核心业务逻辑输出 视图层:处理和外部的交互

  3. 组件工具:Gin(高性能go web框架),Go Mod