依赖管理 | 青训营

简介: 依赖管理 | 青训营

为什么需要依赖管理?

  • 学会站在巨人的肩膀上
  • 复杂工程项目不可能基于标准库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


相关文章
|
3月前
|
机器学习/深度学习 算法 测试技术
「软件项目管理」一文详解软件项目成本计划
该文章详细解释了软件项目成本估算的过程与方法,涵盖了代码行估算法、功能点估算法、用例点估算法、类比估算法、自下而上估算法、参数模型估算法及专家估算法等多种技术,并探讨了成本预算的制定步骤。
「软件项目管理」一文详解软件项目成本计划
|
存储 Go 开发工具
Go语言的依赖管理 | 青训营笔记
Go语言的依赖管理 | 青训营笔记
139 1
|
监控 Java 测试技术
JAVA项目开发从0到1的心路历程
JAVA项目开发是一个复杂而有挑战性的过程,它需要经历从项目规划到需求分析、设计、编码、测试、部署和维护等多个阶段。下面我将分享一下从0到1的心路历程。
457 0
|
敏捷开发 XML 存储
初窥项目构建
初窥项目构建
135 0
初窥项目构建
|
SQL Oracle 前端开发
【JAVASE开发】JAVA项目(二嗨租车项目)
首先是用户登入界面,账号登录总界面部分分为登入与注册选择,账号分为管理员和普通用户,如果是管理员(admin)那么进入到另一个界面(与普通用户不同可以对汽车的一些信息进行修改,eg:上架汽车与删除汽车信息等操作),如果是普通用户的话,也是进入到不一样的界面(对汽车进行租借与还车支付金额等操作)...
207 0
【JAVASE开发】JAVA项目(二嗨租车项目)
|
供应链 安全 IDE
墨菲安全正式发布 murphysec 开源项目!让开发者更安全的使用开源代码
墨菲安全正式发布 murphysec 开源项目!让开发者更安全的使用开源代码
523 0
墨菲安全正式发布 murphysec 开源项目!让开发者更安全的使用开源代码
|
前端开发 JavaScript IDE
程序猿开发软件插件推荐
程序猿开发软件插件推荐
210 0
程序猿开发软件插件推荐
|
消息中间件 Dubbo NoSQL
今年我读了四个开源项目的源码,来分享下心得(上)
今年我读了四个开源项目的源码,来分享下心得(上)
今年我读了四个开源项目的源码,来分享下心得(上)
|
消息中间件 Dubbo 应用服务中间件
今年我读了四个开源项目的源码,来分享下心得(下)
今年我读了四个开源项目的源码,来分享下心得(下)
今年我读了四个开源项目的源码,来分享下心得(下)
|
架构师 NoSQL Java
50个java项目实战,学会这些大神之路不再遥远
  1、最新大神JAVAEE就业实战课程下载 超150G实战JAVAEE 基础部分   2、2021 java300集大型项目实战课程 尚学堂java基础到精通视频教程   3、58系统高级架构师带你实战高可用架构设计课程   4、Activiti6.0工作流引擎深度解析与实战   5、Elasticsearch ELK分布式全文检索入门视频教程   6、Elasticsearch顶尖高手系列-核心知识篇高手进阶篇视频   7、Gradle3.0自动化项目构建技术精讲+实战
470 0

相关实验场景

更多