依赖管理 | 青训营

简介: 依赖管理 | 青训营

为什么需要依赖管理?

  • 学会站在巨人的肩膀上
  • 复杂工程项目不可能基于标准库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天前
|
前端开发 JavaScript Java
6个SpringBoot 项目拿来就可以学习项目经验接私活
6个SpringBoot 项目拿来就可以学习项目经验接私活
43 0
|
3天前
|
NoSQL Java MongoDB
墙裂推荐!超全SpringBoot2.x的奇技淫巧,满足你一切开发需求
一个小伙伴最近参加某一线互联网公司的面试,被问到了一些Spring Boot源码的问题,看看大家能否答出来:
|
3天前
|
敏捷开发 人工智能 Devops
开发必备:2024年整理10款超级好用的项目管理工具
整理10款适合企业研发团队使用的项目管理工具,包括(排名不分先后): 1.PingCode 智能化研发管理工具;2.Ones 大型企业研发管理平台;3.YesDev 研发项目协同管理工具;4.Teambition 阿里巴巴旗下团队协作工具;5.Jira Atlassian公司出品的项目与事务跟踪工具;6.Tower 专注50人以下团队的任务协作 ;7.TAPD 由腾讯出品的一站式敏捷研发协作云平台;8.码云Gitee DevOps一站式研发效能平台;9.禅道 国产开源的项目管理软件;10.Momday 由以色列提供的全新工作平台,内含项目管理模块。
|
10月前
|
监控 Java 测试技术
JAVA项目开发从0到1的心路历程
JAVA项目开发是一个复杂而有挑战性的过程,它需要经历从项目规划到需求分析、设计、编码、测试、部署和维护等多个阶段。下面我将分享一下从0到1的心路历程。
277 0
|
11月前
|
存储 Go 开发工具
Go语言的依赖管理 | 青训营笔记
Go语言的依赖管理 | 青训营笔记
108 1
|
敏捷开发 XML 存储
初窥项目构建
初窥项目构建
100 0
初窥项目构建
|
存储 Dubbo 小程序
Java项目是不是分布式,真有那么重要吗?
大概不知道从什么时候,「微服务」「分布式」这两个词又再次频繁出现在我的视线里。 「微服务」「分布式」在我刚毕业的时候还是比较关注的,那时候还入门了一把SpringCloud,写了一篇很长的文章,还是很顶的,有不少的大号都给我转载了,在知乎又获得了很多的赞。
145 0
|
缓存 JavaScript 前端开发
【从零到一手撕脚手架 | 第三节】项目集成CommitLInt+ESLint+Prettier+StyleLint+LintStaged
前两节教大家如何初始化一个脚手架项目以及如何封装Vue技术栈常用的工具库。本小节教大家如何向我们的脚手架中配置ESLint、Prettier、StyleLint、LintStage。
471 0
【从零到一手撕脚手架 | 第三节】项目集成CommitLInt+ESLint+Prettier+StyleLint+LintStaged
|
存储 Java 程序员
一文搞懂Java项目工程管理神器——Maven
在日常的Java项目开发当中,构建一个通用、合理、统一的项目工程框架,一直是很多程序员头疼的事情。 要解决这个问题,我们就不得不提到Maven这个Java工具了。 本文会详细分享Maven,并在文章内分享代码实例。
274 1
一文搞懂Java项目工程管理神器——Maven
|
Dubbo Java 应用服务中间件
使用Kitex框架构建自己的服务|青训营笔记
这篇文章主要跟随官方文档给出自己使用Kitex构建一个服务的过程,而后续Kitex更多的特性则需要大家深入学习、实践、总结。
572 0
使用Kitex框架构建自己的服务|青训营笔记

相关实验场景

更多