go语言入门 | 青训营笔记

39 阅读2分钟

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

一、并发编程

  • 并发与并行

    • 并发:多个程序一起在单核CPU上,CPU轮流分配资源给程序,同一时间只能运行一个程序
    • 并行:多个程序在多核CPU上,每个核专门负责一个程序,同一时间能运行多个程序
  • 线程与协程

    • 线程:内核态的,一个线程运行多个协程, MB级别的
    • 协程:用户态的,轻量级的线程,KB级别
  • Gorontine/ Channel / Sync

二、依赖管理

  • 依赖管理演进

    • GOPATH

      • 依赖直接在src目录下,无法实现多版本控制
    • Go Vender

      • 依赖副本放在ProjectRoot/vender下,这样可以实现同个包不同项目使用相同版本的依赖
      • 但这样无法控制依赖的版本
      • 更新项目时可能会出现依赖冲突,导致编译出错
    • Go Module

      • 概述
        • 定义版本规则和版本与项目的依赖关系
        • 通过 go.mod 文件来管理依赖版本
        • 通过 go get/ go mod 等指令来管理依赖包
      • 使用方式
        • 利用go.mod 来描述依赖
        • 利用proxy建立中心仓库,放置依赖
        • 利用go get/mod 作为本地工具
  • go get/ go mod

    • go get

      • @update 默认
      • @none 删除依赖
      • @v1.12 tag版本,语义版本
      • @23dfdd5 特定的commit
      • @master 分支最新的commit
    • go mod

      • init 初始化,建立go.mod文件
      • download 将依赖从中心仓库下载到本地
      • tidy 删除不需要的依赖,增加需要的依赖

三、测试

  • 回归测试
  • 集成测试
  • 单元测试
    • 测试的单元

      • 函数
      • 模块
      • 其他
    • 规则

      • 文件以_test.go结尾
      • func Testxxx(*tesing.T)
      • 初始化逻辑放在TestMain中
    • 要求

      • 一般覆盖率为50%-60% 较高覆盖率为80%
      • 各个测试分支相互独立,全面覆盖
      • 测试的单元要足够小

四、总结

  • 从这里开始,除了测试之外,和其他语言来说,相似之处不多,需要额外学习和训练