今日笔记|青训营

50 阅读1分钟

Go语言入门-工程实践

02.依赖管理

02.背景

2.1 Go依赖管理演进

GOPATH > GO Vendor > Go Module

2.1.1 GOPATH
  1. 环境变量 $GOPATH
  • bin:项目编译的二进制文件
  • pkg:项目编译的中间产物,加速编译
  • src:项目编码
  1. 项目代码直接依赖src下的代码。
  2. go get下载最新版本的包到src目录下。
2.1.1 GOPATH-弊端
  • 场景:A和B依赖于某一package的不同版本。
  • 问题:无法实现package的多版本控制。
2.1.2 Go Vendor
  • 项目目录下载增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor.
  • 依赖寻址方式:vendor=>GOPATH

通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。

2.1.2 Go Vendor-弊端

问题:

  • 通过go.mod文件管理依赖包版本
  • 通过go get/go mod指令工具管理依赖包

2.2 依赖管理三要素

2.3.1 依赖配置-go.mod
  • 依赖管理基本单元
  • 原生库
  • 单元依赖

依赖标识:[Moudle Path][Version/Pseudo-version]

2.3.2 依赖配置-version
  • 语义化版本
  • 基于commit伪版本
2.3.3 依赖配置-incompatible
  • 主版本2+模板会在模块路径增加/vN后缀。
  • 对于没有go.mod文件并且主版本2+的依赖,会+incompatible.
2.3.4 依赖配置-依赖图
2.3.5 依赖分发-回源
  • 无法保证构建稳定性 : 增加/修改/删除软件版本
  • 无法保证依赖可用性 :删除软件
  • 增加第三方压力 :代码托管平台负载问题
2.3.6 依赖分发-变量 GOPROXY
2.3.7 工具-go get

go get example.org/pkg:

  1. @update: 默认
  2. @none: 删除依赖
  3. @v1.1.2: tag版本,语义版本
  4. @23dfdd5: 特定的commit
  5. @master : 分支的最新commit
2.3.8 工具-go mod
  1. init : 初始化,创建go.mod文件
  2. download : 下载模块到本地缓存
  3. tidy : 增加需要的依赖,删除不需要的依赖

02.依赖管理三要素

总结

一些对于Day2学习的Go语言依赖管理具体笔记内容记录,主要是Go依赖管理的演进进程和go mod使用的详细讲述,对go mod有整体使用上的概念。