依赖管理 | 青训营

简介: 依赖管理 | 青训营

为什么需要依赖管理?

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


相关文章
|
6月前
|
NoSQL Java MongoDB
墙裂推荐!超全SpringBoot2.x的奇技淫巧,满足你一切开发需求
一个小伙伴最近参加某一线互联网公司的面试,被问到了一些Spring Boot源码的问题,看看大家能否答出来:
|
3月前
|
JavaScript 前端开发
构建工具到底是什么呢? 一篇帮你搞懂
构建工具到底是什么呢? 一篇帮你搞懂
47 0
|
6月前
|
前端开发 JavaScript 搜索推荐
< 知识拓展:前端代码规范 >
前端开发中,随着工具组件的多样化,代码的“千人千面”现象带来了管理和维护的挑战。因此,制定代码规范变得至关重要,它能提升代码质量,便于团队协作。命名规范要求文件和目录使用小写和下划线或驼峰式,HTML应合理缩进,属性用双引号,自闭合标签避免斜线。CSS代码遵循HTML缩进,空格和换行有特定规则,注释统一格式。JavaScript中,注重简洁和易读,分号使用需明确,变量命名采用小驼峰,函数调用和声明有特定空格规则。代码规范旨在提高可读性和团队协作效率,但也要避免过度规范。
160 0
< 知识拓展:前端代码规范 >
|
6月前
|
敏捷开发 人工智能 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 由以色列提供的全新工作平台,内含项目管理模块。
|
存储 Go 开发工具
Go语言的依赖管理 | 青训营笔记
Go语言的依赖管理 | 青训营笔记
134 1
|
监控 Java 测试技术
JAVA项目开发从0到1的心路历程
JAVA项目开发是一个复杂而有挑战性的过程,它需要经历从项目规划到需求分析、设计、编码、测试、部署和维护等多个阶段。下面我将分享一下从0到1的心路历程。
444 0
|
敏捷开发 XML 存储
初窥项目构建
初窥项目构建
129 0
初窥项目构建
|
存储 Java 测试技术
Maven基础理论知识整理
Maven基础理论知识整理
85 0
|
Dubbo Java 应用服务中间件
使用Kitex框架构建自己的服务|青训营笔记
这篇文章主要跟随官方文档给出自己使用Kitex构建一个服务的过程,而后续Kitex更多的特性则需要大家深入学习、实践、总结。
677 0
使用Kitex框架构建自己的服务|青训营笔记
|
存储 Dubbo 小程序
Java项目是不是分布式,真有那么重要吗?
大概不知道从什么时候,「微服务」「分布式」这两个词又再次频繁出现在我的视线里。 「微服务」「分布式」在我刚毕业的时候还是比较关注的,那时候还入门了一把SpringCloud,写了一篇很长的文章,还是很顶的,有不少的大号都给我转载了,在知乎又获得了很多的赞。
207 0