青训营笔记

58 阅读2分钟

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

第二课-Go语言进阶

  • 协成:
    • Goroutine:调用函数时+go关键字
    • 协成之间通信CSP:go提倡通过通信共享内存
    • 通道Channel:
      • 有缓存通道:make(chan int)
      • 无缓存通道:make(chan int,2(容量)) Image.png
    • Sys关键字
      • 并发安全Lock:需注意并发安全操作
      • 并发同步WaitGroup:
        • Add:计数器+delta
        • Done:计数器-1
        • Wait:阻塞至计数器=0
  • 依赖管理:
    • GoModule
      • go.mod文件:管理依赖包版本
      • go get/go mod指令工具:管理依赖包
    • 依赖管理三要素(Java-Maven)
      • 配置文件,描述依赖-go.mod
      • 中心仓库管理依赖库-Proxy
      • 本地工具-go get/mod
    • go get工具
      • @update-默认
      • @none-删除依赖
      • @v1.1.2-tag版本,语义版本
      • @23dfdd5-特定的commit
      • master-分支的最新commit
    • go mod工具
      • init-创建go.mod文件
      • download-下载模块到本地缓存
      • tidy-增加需要的依赖,删除不需要的依赖
  • 测试(输入-输出-校对):
    • 单元测试规则:测试文件:_test.go结尾
    • func TestXxx(*testing.T)
    • 初始化逻辑放到TestMain中
      • 测试前:数据装载等前置工作
      • 测试后:资源释放等收尾工作
    • assert包:正确性判断
    • 覆盖率Tips:覆盖率越高出现Bug概率越低
    • Mock函数:为一个函数/方法打桩
    • 基准测试:显示程序运行的时的系统速率
      • 优化:fastrand-提高性能,牺牲了数据的一致性
  • 项目实践:话题-发帖-回帖
    • 需求设计
      • 社区话题页面
        • 展示话题(标题+文字描述)和回帖列表
        • 不考虑前端页面,只考虑后端数据逻辑处理
        • 不使用数据库存储,使用文件存储
    • 代码开发
    • 分层结构
        • Repository(数据层)-Model
        • Server(逻辑层)-Entity
        • Controller(视图层)-View
    • 测试运行
      • 单元测试
      • Mock测试
      • 基准测试