依赖管理 | 青训营

简介: 依赖管理 | 青训营

为什么需要依赖管理?

  • 学会站在巨人的肩膀上
  • 复杂工程项目不可能基于标准库0~1编码搭建
  • 管理依赖库

Go依赖管理演进

GoPATH、GoVendor、GoMoudle

  • 不同环境(项目)依赖的版本不同
  • 控制依赖库的版本

GoPATH

  • 环境变量
  • 项目代码依赖src下的代码
  • go get下载最新版本的包到src目录下 问题:无法实现package的多版本控制

GoVendor

  • 项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor
  • 依赖寻址方式: vendor => GOPATH
  • 通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。 问题:无法控制依赖的版本。更新项目又可能出现依赖冲突,导致编译出错。

GoMoudle

终极目标:定义版本规则和管理项目依赖关系

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

依赖管理三要素

配置文件,描述依赖 go.mod
中心仓库管理依赖库 Proxy
本地工具 go get/mod

go.mod

Go

复制代码

module example/project/app    //依赖管理基本单元
go 1.16    //原生库
require (  //单元依赖
  example/lib1 v1.0.2
  example/lib2 v1.0.0 // indirect 间接依赖
  example/lib3 v0.1.0-20190725025543-5a5fe074e612
  example/lib4 v0.0.0-20180306012644-bacd9c7ef1dd // indirect 间接依赖
  example/lib5/v3 v3.0.2
  example/lib6 v3.2.0+incompatible
)

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

incompatible

主版本2+模块会在模块路径增加/vN后缀。 对于没有go.mod 文件并且主版本2+的依赖,会+incompatible

version

语义化版本`MAJOR.{MAJOR}.MAJOR.{MINOR}.$ {PATCH}

V1.3.0

V2.3.0

基于commit伪版本vX.0.O-yyyymmddhhmmss-abcdefgh1234

v0.0.0-20220401081311-c38fb59326b7

v1.0.0-20201130134442-10cb98267c6c

依赖分发-Proxy

开发者直接通过Github或者SVN管理代码,有一定的缺点,不符合构建系统的初衷

  • 无法保证构建稳定性 增加/修改/删除软件版本
  • 无法保证依赖可用性 删除软件
  • 增加第三方压力 代码托管平台负载问题

使用Proxy可以解决这些问题

Go Proxy是一个服务站点,它会缓源站中的软件内容,缓存的软件版本不会改变,并且在源站软件删除之后依然可用

变量 GOPROXY

Golang 学习笔记之GOPROXY - 知乎 (zhihu.com)

怎么设置go proxy - 知乎 (zhihu.com)

为什么要使用 go module proxy - 知乎 (zhihu.com)

工具

go get

go mod


相关文章
|
存储 前端开发 安全
GET 和 POST 请求:理解它们之间的区别和适用场景
GET 和 POST 请求:理解它们之间的区别和适用场景
|
JavaScript 前端开发
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
|
监控 IDE Java
如何在无需重新启动服务器的情况下在 Spring Boot 上重新加载我的更改?
如何在无需重新启动服务器的情况下在 Spring Boot 上重新加载我的更改?
1178 8
|
应用服务中间件 nginx 索引
7-16| *8 directory index of "E:\wwwroot/" is forbidden, client: 127.0.0.1, server: 192.168.1.240, re
7-16| *8 directory index of "E:\wwwroot/" is forbidden, client: 127.0.0.1, server: 192.168.1.240, re
|
JavaScript
Ant Design vue 表格内换行
Ant Design vue 表格内换行
558 1
|
弹性计算 大数据 测试技术
阿里云服务器2核2G服务器多少钱?阿里云服务器2核2G服务器测评
阿里云服务器2核2G的价格根据配置和促销活动会有所不同。在2024年3月1日的降价政策之前,该服务器的价格可能为99元/年。然而,降价政策实施后,其价格可能会有所调整。具体的价格信息,建议前往阿里云官网查询。 关于阿里云服务器2核2G的测评,该服务器在性能上可以满足日常的网站搭建、应用开发等任务。它配备了2核CPU和2G内存,以及40G ESSD Entry云盘作为系统盘,可以保证服务器的稳定运行和高效性能。同时,服务器自带3M固定带宽,下载速度可达384KB/秒,且不限制流量,用户可以在使用过程中享受到稳定的网络连接速度。
|
存储 编译器 Go
100天精通Golang(基础入门篇)——第8天:Go语言程序的流程结构和条件语句
100天精通Golang(基础入门篇)——第8天:Go语言程序的流程结构和条件语句
133 0
|
开发框架 JSON 资源调度
Locust压测框架入门
Locust压测框架入门
424 0
|
Python
中文LLM测评
下面是针对 Modelscope 的代码相关;写作创作;中文游戏三个方面的问题,并附上一段测评内容。
222 0
|
数据采集 Python
python自动签到参考网站
python自动签到参考网站