GO 项目依赖管理:go module总结
转载请注明出处:
1.go module介绍
go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用 go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等 使用go module之后我们可不用将代码放置在src下 使用 go module 管理依赖后会在项目根目录下生成两个文件 go.mod(会记录当前项目的所依赖)和go.sum(记录每个依赖库的版本和哈希值)
包管理工具go mod具有以下特性:
1)自动下载依赖包,即第三方包。
2)自定义包无须放在GOPATH设置的路径。
3)第三方包或自定义包写在go.mod文件中,通过go.mod文件管理包。
4)已经转移的第三方包或自定义包,在go.mod文件中使用replace替换,不需要修改代码。
5)对第三方包指定版本号。
2.GO111MODULE配置
GO111MODULE 是 Go 1.11 版本后引入的模块管理功能。使用 GO111MODULE 可以让 Go 语言项目获得更好的包管理和版本控制功能。 GO111MODULE 的配置有以下几种:
auto:在 $GOPATH/src 之外的项目和使用了 Go 1.11 之前的依赖管理方式的项目开启模块支持,其他项目不开启。当项目在
GOPATH/src目录之外,并且项目根目录有go.mod文件时,才开启go module。on:开启模块支持,无论项目是否在 $GOPATH/src 下。启用
go module,编译时会忽略GOPATH和vendor文件夹,只根据go.mod下载依赖,这种模式称作module-aware模式,这种模式下,GOPATH不再在build时扮演导入的角色,但是尽管如此,它还是承担着存储下载依赖包的角色。它会将依赖包放在GOPATH/pkg/mod目录下。off:关闭模块支持,使用 GOPATH 和 vendor 目录作为依赖管理方式。 可以通过设置环境变量 GO111MODULE 或者在项目目录中创建 go.mod 文件来配置 GO111MODULE。
GO111MODULE=off: 禁用go module,编译时会在vendor目录下和GOPATH目录中查找依赖包。也把这种模式叫GOPATH模式
3.GO ROOT 与 GO PATH
GOPATH
GOPATH是Go语言的工作目录,它是一个环境变量,用于指定Go语言源代码、依赖库和可执行文件的存放位置。在Go语言中,所有的源代码都必须存放在GOPATH目录下的src子目录中,所有的依赖库和可执行文件则分别存放在GOPATH目录下的pkg和bin子目录中
GOPATH的作用是指定Go语言源代码、依赖库和可执行文件的存放位置,并且在编译项目时自动查找相应的文件。

通过go env查看go环境相关的配置,可以看到 GO111MODULE 没有设置,默认为关闭off,项目的go依赖文件下载到 go path 目录中对应的src文件夹下:

GOROOT
GOROOT是Go语言的安装目录,它是一个环境变量,用于指定Go语言的安装路径。在Go语言中,所有的标准库都存放在GOROOT目录下的src子目录中,所有的可执行文件则存放在GOROOT目录下的bin子目录中。
4.环境配置设置
Windows 下开启 GO111MODULE 的命令为:
set GO111MODULE=on
set GO111MODULE=auto
go 1.3版本之后,可以通过以下命令修改GO111MODULE:
go env -w GO111MODULE=on
go env -w GO111MODULE=auto
linux配置
# 开启模块支持
export GO111MODULE=on
# 关闭模块支持
export GO111MODULE=off
5.创建go.mod文件
在项目目录中执行以下命令会自动创建 go.mod 文件:
go mod init <module-name>
其中,module-name 是你的项目名称。 管理依赖仓库: 当 GO111MODULE 开启时,Go 语言会优先从 go.mod 文件中的模块信息中获取依赖库的版本信息,如果没有找到,则会去 GOPATH 和 vendor 目录下查找依赖库。 使用 go get 命令或者直接修改 go.mod 文件来管理依赖库的版本信息。例如:
# 使用 go get 命令安装依赖库(会自动更新 go.mod 文件)
go get -u github.com/gin-gonic/gin
# 直接修改 go.mod 文件
require (
github.com/gin-gonic/gin v1.6.3
)
可以使用以下命令来更新依赖库:
go mod tidy # 移除不需要的依赖库
go mod vendor # 将依赖库复制到 vendor 目录下
go mod download # 下载依赖库
6.go.mod 文件说明
如在mygo项目的目录下,输入go mod init mygo 指令即可在mygo下创建go.mod文件
在mygo的go.mod中设置自定义包mpb的信息,mygo的go.mod代码如下
module mygo
go 1.18
require (
mpb v0.0.0
)
replace mpb => ./mpb
go.mod的代码说明如下:
1)module mygo代表当前go.mod文件隶属于文件夹mygo。
2)go 1.18代表当前Go语言的版本信息。
3)require代表需要调用第三方包或自定义包,小括号里面一行代码代表一个包信息。
4)mpb v0.0.0代表包的信息,mpb是包名,v0.0.0是当前包的版本信息。
5)replace为require的包指定新的路径地址,常用于本地自定义包或第三方包的路径迁移,例如mpb => ./mpb代表自定义包mpb为当前路径的文件夹mpb。
GO 项目依赖管理:go module总结的更多相关文章
- Maven多模块项目依赖管理
Maven多模块项目依赖管理及dependencies与dependencyManagement的区别 转自:http://blog.csdn.net/liutengteng130/article/d ...
- Maven解读:项目依赖管理如何优化
Github地址:https://github.com/zwjlpeng/Maven_Detail Maven最大的好处莫过于其强大的依赖管理系统,在Pom配置文件中指定项目需要的Jar包的坐标,Ma ...
- python项目依赖管理分享迁移后重建开发环境(一)virtualenv 和 pip
作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/rebuild-development-environment-with-virtualenv-an ...
- python之项目依赖管理
生成所有依赖清单 requirements.txt 1. pipreqs 工具 安装) pip install pipreqs 执行生成依赖列表命令) pipreqs ./ 完善版本: pipreq ...
- 使用maven-pom进行依赖管理与自动构建
使用maven-pom进行依赖管理与自动构建 span.kw { color: #007020; font-weight: bold; } /* Keyword */ code > span.d ...
- composer php依赖管理工具
#composer是什么 Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. composer出现之前我们php项目依赖管理大部分都是手动 ...
- SpringBoot原理深入及源码剖析(一) 依赖管理及自动配置
前言 传统的Spring框架实现一个Web服务需要导入各种依赖jar包,然后编写对应的XML配置文件等,相较而言,SpringBoot显得更加方便.快捷和高效.那么,SpringBoot究竟是如何做到 ...
- 用Apache Ivy实现项目里的依赖管理
Apache Ivy是一个管理项目依赖的工具. 它与Maven Apache Maven 构建管理和项目管理工具已经吸引了 Java 开发人员的注意.Maven 引入了 JAR 文件公共存储库的概念 ...
- 用Apache Ivy实现项目里的依赖管理 分类: C_OHTERS 2014-07-06 18:11 564人阅读 评论(0) 收藏
Apache Ivy是一个管理项目依赖的工具. 它与Maven Apache Maven 构建管理和项目管理工具已经吸引了 Java 开发人员的注意.Maven 引入了 JAR 文件公共存储库的概念 ...
- Go依赖管理及Go module使用
Go语言的依赖管理随着版本的更迭正逐渐完善起来. 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个版本的代码.如果不同 ...
随机推荐
- python入门教程之二十邮件操作
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...
- pandas之excel操作
Excel 是由微软公司开发的办公软件之一,它在日常工作中得到了广泛的应用.在数据量较少的情况下,Excel 对于数据的处理.分析.可视化有其独特的优势,因此可以显著提升您的工作效率.但是,当数据量非 ...
- pysimplegui之读写配置项操作
用户设置 API 在 4.30.0 版中,有一组新的 API 调用可用于帮助"用户设置".将用户设置视为自动写入硬盘的字典.基本上就是这样. 在 4.50.0 版中,除了现有的 J ...
- Cesium 案例(九)示例中小程序集合(1)
因为这几天在忙一些客观上无法逃脱的事,没有大块时间对中大型案例进行学习,所以对官方案例中的代码不超过40行的程序进行了学习.我把他们放在一到两个随笔中. 注:[所有案例中最前面务必加上] 1 Cesi ...
- git撤销某一次commit提交
一.使用git rebase命令 如果您想彻底删除 Git 中的某次提交的内容,可以使用 git rebase 命令并将该提交删除. 以下是删除 Git 提交内容的步骤: 找到要删除的提交的哈希值.可 ...
- 用 hexo 结合 github 从0到1开始搭建属于你的blog
前言 github pages服务搭建博客的好处有: 全是静态文件,访问速度快: 免费方便,不用花一分钱就可以搭建一个自由的个人博客,不需要服务器不需要后台: 可以随意绑定自己的域名,不仔细看的话根本 ...
- Android刷机日记
0x01 工具准备(镜像之类的注意下载的版本要与手机一致) 1)SDK工具 https://developer.android.com/studio/releases/platform-tools?h ...
- 2021-11-27:给定一个数组arr,长度为N,做出一个结构,可以高效的做如下的查询: 1) int querySum(L,R) : 查询arr[L...R]上的累加和; 2) int query
2021-11-27:给定一个数组arr,长度为N,做出一个结构,可以高效的做如下的查询: int querySum(L,R) : 查询arr[L-R]上的累加和; int queryAim(L,R) ...
- python 之路,致那些年,我们依然没搞明白的编码
摘自:金角大王https://www.cnblogs.com/alex3714/articles/7550940.html 本节内容 编码回顾 编码转换 Python的bytes类型 编码回顾 在备编 ...
- .NET 通过源码深究依赖注入原理
依赖注入 (DI) 是.NET中一个非常重要的软件设计模式,它可以帮助我们更好地管理和组织组件,提高代码的可读性,扩展性和可测试性.在日常工作中,我们一定遇见过这些问题或者疑惑. Singleton服 ...