一文详解go mod依赖管理详情
目录
- 1. go的依赖管理发展
- 2. go.mod 文件分析
- 3. go mod依赖下载工具
- 4. 可能出现的问题汇总
1. go的依赖管理发展
- GOPATH 所有的依赖都放置在同一路径下,可以复用下载的依赖,但是当不同项目需要依赖不同版本的依赖时,就很容易出现冲突问题。
- govendor 解决了依赖库版本不一致的问题,但是不好控制(了解即可)
- go mod 使用go.mod文件管理以来的版本,通过go get下载依赖
2. go.mod 文件分析
module xx/xx/xx/v2 go 1.16 require ( xx/xx/xx v1.3.3 xx/xx/xx v0.0.0-20200330080233-e4ea8bd1cbed xx/xx/xx v2.2.1+incompatible xx/xx/xx v0.3.0 // indirect ) exclude ( xx/xx/xx v1.3.3-rc.0 ) replace xx/xx/xx => xx/xx v1.3.3 retract ( v1.0.0 // 废弃的版本,请使用v1.1.0 )
module xx/xx/xx/v2
是指该项目的module路径,/v2
是指版本信息,可以省略。
go 1.16
是指项目需要的最低go的版本
require()是项目需要的其他依赖:
xx/xx/xx v1.3.3
指明了项目需要的依赖以及版本号。xx/xx/xx v0.0.0-20200330080233-e4ea8bd1cbed
是时间戳性质的版本号。xx/xx/xx v0.3.0 // indirect
是指依赖需要的依赖xx/xx/xx v2.2.1+incompatible
是指依赖的库的major版本大于引用的版本,不合规范。
exclude()
指引用依赖时,跳过某些版本
replace xx/xx/xx => xx/xx v1.3.3
指替换某些依赖
retract()
声明废弃的版本
3. go mod依赖下载工具
go get xx/xx/x@${parameter}
${parameter}可以选择的参数如下:
go mod tidy 根据go.mod文件添加或者删除项目所需要的依赖
4. 可能出现的问题汇总
go get -u xx/xx/x
这个操作会升级依赖的依赖,有可能会引发依赖版本不兼容问题导致的编译不通过,比如thrift的0.13与0.14不兼容。
循环依赖问题:
要注意避免循环依赖问题。
到此这篇关于一文详解go mod依赖管理详情的文章就介绍到这了,更多相关go mod依赖管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
go mod 安装依赖 unkown revision问题的解决方案
背景 公司一个golang的项目,使用到了公司的私有仓库,去执行go mod tidy(下载依赖)的时候,到download公司私有库的时候就报错,报错信息也不明显,只是提示找不到影响版本unkown revision 小知识 go mod golang用来管理用来的,类似java的maven(但肯定没有maven这么好用) go mod tidy ,下载更新依赖 go install这种下载依赖的方式其实是通过go get的方式去下载的 go insall -x 加上-x命令,可以查看更多的错
-
golang使用 gomodule 在公共测试环境管理go的依赖的实例详解
背景:调试服务最好的方式就是直接上机实践.对在公司的员工来说,在同一套服务上协同开发比在单独的环境上开发,应该会更有感觉.有问题可以一起发现并解决,也能够一同开发需求. 但是,公司的测试机往往是没办法连外网的,而golang 的大部分工程都需要直接从github 上下载依赖,这就导致 依赖文件需要先提前上传到开发机上.那么当开发机上需要运行多个golang 工程的时候,如何共享这些依赖,减少维护依赖库的工作量呢? 这也是需要大家协作完成的- 最终总结:项目采用 go module + vendo
-
Go外部依赖包从vendor,$GOPATH和$GOPATH/pkg/mod查找顺序
vendor vendor概念最早是由Keith提出,用来存放依赖包.在版本1.5出现.例如gb项目提供了一个名为gsftp的示例项目,它有一个gsftp程序,在标准库之外有三个依赖项.golang.org/x/crypto/ssh, golang.org/x/crypto/ssh/agent和github.com/pkg/sftp. 按vendor概念调整的目录结构如下: $GOPATH | src/ | | github.com/constabulary/example-gsftp/ | |
-
Go modules replace解决Go依赖引用问题
为什么会用到 replace 取名是一个很有讲究的事情,但每个人都不一样. 一开始,我写了一个 A 项目,代码仓名称为 project-alpha 但 go.mod 里的 package 设置的是 github.com/k8scat/alpha, 当在另一项目 B 中想要引用 A 项目的代码时,一般来说,用的是 github.com/k8scat/project-alpha 因为 go get 会使用 git 去,但由于 package 和代码仓的名称不一样 需要使用 replace 进行转换一
-
go自动下载所有的依赖包go module使用详解
今天在学习dubbo-go的时候,下载了dubbo-go的example,依赖的包太多了,之前都是手动下载某个依赖的包,现在手动一个一个 go get 那太麻烦了.因为我是搞java的,刚开始用go的时候感觉有点奇怪,go代码所依赖的所有的第三方库都放在GOPATH这个目录下面,这就导致了同一个库只能保存一个版本的代码.如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决?总不能改包名吧,看了一下 dubbo-samples/golang/的代码 发现了有个 go.mod文件,百度一下 g
-
一文详解go mod依赖管理详情
目录 1. go的依赖管理发展 2. go.mod 文件分析 3. go mod依赖下载工具 4. 可能出现的问题汇总 1. go的依赖管理发展 GOPATH 所有的依赖都放置在同一路径下,可以复用下载的依赖,但是当不同项目需要依赖不同版本的依赖时,就很容易出现冲突问题. govendor 解决了依赖库版本不一致的问题,但是不好控制(了解即可) go mod 使用go.mod文件管理以来的版本,通过go get下载依赖 2. go.mod 文件分析 module xx/xx/xx/v2 go 1
-
一文详解Electron 电源状态管理
目录 Electron 电源相关模块 其中 powerMonitor 模块提供的接口 powerSaveBlocker 模块提供的方法 空闲状态监控 电源状态监控 锁屏和解锁 休眠和唤醒 系统行为阻断 Electron 电源相关模块 在 Electron 中有两个模块是跟电源相关的: powerMonitor:用于获取电源相关信息,监听电源相关事件 powerSaveBlocker:用于阻止系统进入睡眠状态 其中 powerMonitor 模块提供的接口 powerSaveBlocker 模块提
-
一文详解Pinia和Vuex与两个Vue状态管理模式
目录 前言 安装 挂载 Vuex Pinia 修改状态 vuex Pinia Pinia解构(storeToRefs) getters Pinia Vuex modules Pinia Vuex 写在最后 前言 Pinia和Vuex一样都是是vue的全局状态管理器.其实Pinia就是Vuex5,只不过为了尊重原作者的贡献就沿用了这个看起来很甜的名字Pinia. 本文将通过Vue3的形式对两者的不同实现方式进行对比,让你在以后工作中无论使用到Pinia还是Vuex的时候都能够游刃有余. 既然我们要
-
一文详解C++中动态内存管理
目录 前言 1.C/C++程序的内存开辟 2.C语言中动态内存管理方式:malloc/calloc/realloc/free 2.1malloc.calloc.realloc区别? 3.C++内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 3.3new和malloc处理失败 4.operator new与operator delete函数 4.1 operator new与operator delete函数 4.1.1 我们看看operator
-
一文详解Golang中consul的基本使用
目录 consul consul的安装和部署 docker安装 consul镜像的启动 启动一个tcp_health_check的服务注册 http版 服务发现 consul consul是一个开源服务注册和服务发现的中心,可以用于微服务的注册和服务之间的调用的发现,帮助上游服务找到下游服务的具体ip:port或者是domain,也可以使用dns的方式让consul帮你去做转发,具体介绍请看consul的官网,consul区分server-agent和client-agent,client-ag
-
一文详解Spring加载properties文件的方式
目录 一.druid的资源配置管理 二.c3p0资源配置管理 三.加载properties文件 不加载系统属性 加载多个properties文件 加载所有properties文件 加载properties文件标准格式 从类路径或jar包中搜索并加载properties文件 spring第三方资源配置管理 DruidDataSource ComboPooledDataSource 一.druid的资源配置管理 导入druid的坐标: <dependency> <groupId>com
-
一文详解Golang中net/http包的实现原理
目录 前言 http包执行流程 http包源码分析 端口监听 请求解析 路由分配 响应处理 前言 Go语言自带的net/http包提供了HTTP客户端和服务端的实现,实现一个简单的http服务非常容易,其自带了一些列结构和方法来帮助开发者简化HTTP服务开发的相关流程,因此我们不需要依赖任何第三方组件就能构建并启动一个高并发的HTTP服务器,net/http包在编写web应用中有很重要的作用,这篇文章会学习如何用 net/http 自己编写实现一个 HTTP Server 并探究其实现原理,具体
-
一文详解Golang 定时任务库 gron 设计和原理
目录 cron 简介 gron 定时参数 源码解析 Cron Entry 按照时间排序 新增定时任务 启动和停止 Schedule 扩展性 经典写法-控制退出 结语 cron 简介 在 Unix-like 操作系统中,有一个大家都很熟悉的 cli 工具,它能够来处理定时任务,周期性任务,这就是: cron. 你只需要简单的语法控制就能实现任意[定时]的语义.用法上可以参考一下这个Crontab Guru Editor,做的非常精巧. 简单说,每一个位都代表了一个时间维度,* 代表全集,所以,上面
-
一文详解 Compose Navigation 的实现原理
目录 前言 1. 从 Jetpack Navigation 说起 2. 定义导航 3. 导航跳转 4. 保存状态 SaveableStateHolder & rememberSaveable 导航回退时的状态保存 底部导航栏切换时的状态保存 5. 导航转场动画 6. Hilt & Navigation 7. 总结 前言 一个纯 Compose 项目少不了页面导航的支持,而 navigation-compose 几乎是这方面的唯一选择,这也使得它成为 Compose 工程的标配二方库.介绍
-
一文详解React Redux使用方法
目录 一.理解JavaScript纯函数 1.1 纯函数的概念 1.2 副作用概念的理解 1.3 纯函数在函数式编程的重要性 二.Redux的核心思想 2.1 为什么需要 Redux 2.2 Redux的核心概念 2.2.1 store 2.2.2 action 2.2.3 reducer 2.3 Redux的三大原则 2.3.1 单一数据源 2.3.2 State是只读的 2.3.3 使用纯函数来执行修改 2.4 Redux 工作流程 三.Redux基本使用 3.1 创建Store的过程 3.
随机推荐
- jQuery插件Slider Revolution实现响应动画滑动图片切换效果
- 在AngularJS中使用jQuery的zTree插件的方法
- 原生js代码实现图片放大境效果
- iOS中时间与时间戳的相互转化实例代码
- 浅谈在JAVA项目中LOG4J的使用
- JavaScript数组操作函数汇总
- 8个出色的WordPress SEO插件收集
- INSERT INTO .. ON DUPLICATE KEY更新多行记录
- mySQL中LEN()与DATALENGTH()的区别
- 用js代码改变单选框选中状态的简单实例
- 最基本的几种CSS文字滤镜效果
- 如何让浏览器支持jquery ajax load 前进、后退功能
- C++实现简单的图书管理系统
- 单例模式垃圾回收_动力节点Java学院整理
- 纯原生js实现贪吃蛇游戏
- jQuery事件绑定用法详解
- 基于jquery跨浏览器显示的file上传控件
- JavaScript插件化开发教程 (三)
- Flex和.NET协同开发利器FluorineFx Flex与.NET互操作
- Linux管理员手册(1)--系统概述