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这个目录下面.这就导致了同一个库只能保存一个版本的代码.如果不同 ...
随机推荐
- ABC291题解(D-G)
ABC291 D - Flip Cards Solution: 考虑DP,定义状态\(F_{i,0}\)为第\(i\)张卡片正面朝上的方案数,\(F_{i,1}\)为第\(i\)张卡片背面朝上的方案数 ...
- Perceptron, Support Vector Machine and Dual Optimization Problem (3)
Support Vector Machines Perceptron and Linear Separability 假设存在一个 linear decision boundary,它可以完美地对 t ...
- selenium验证码处理之机器学习(光学识别ocr技术获取验证码的数据)
ocr识别库地址: https://github.com/UB-Mannheim/tesseract/wiki 遇到的问题:百度的解释------------------- 遇到的问题2:
- 企业什么喜欢做电视看板,电视看板浏览网页的必备工具 电视看板浏览器 电视看板自动打开网页 电视看板必备APP
企业喜欢做电视看板主要是因为它可以提供以下几个方面的优势: 增强企业形象:电视看板可以将企业的信息和广告以更加生动.直观的方式呈现出来,提高企业形象和知名度. 提高工作效率:电视看板可以在企业内部作为 ...
- 6步带你用Spring Boot开发出商城高并发秒杀系统
摘要:本博客将介绍如何使用 Spring Boot 实现一个简单的商城秒杀系统,并通过使用 Redis 和 MySQL 来增强其性能和可靠性. 本文分享自华为云社区<Spring Boot实现商 ...
- 技术分享:Proxy-Pool代理池搭建IP代理
技术分享:Proxy-Pool代理池搭建IP代理 前言本章内容仅供参考,不涉及实际使用,主要使用Python环境和Redis数据库进行环境搭建,工具网盘存储如下,有问题可以私聊我.网址:https:/ ...
- Django之时区修改
修改时区方法 环境:windows10 修改settings.py文件,修改TIME_ZONE和USE_TZ参数 TIME_ZONE = 'Asia/Shanghai' USE_TZ = False
- StampedLock:JDK1.8中新增,比ReadWriteLock还快的锁
摘要:StampedLock是一种在读取共享变量的过程中,允许后面的一个线程获取写锁对共享变量进行写操作,使用乐观读避免数据不一致的问题,并且在读多写少的高并发环境下,比ReadWriteLock更快 ...
- day05-SpringCloud Eureka-服务注册与发现02
SpringCloud Eureka-服务注册与发现02 3.搭建EurekaServer集群-实现负载均衡&故障容错 3.1为什么需要集群EurekaServer? 微服务RPC远程服务调用 ...
- MySQL(二)字符集、比较规则与规范
1 字符集的相关操作 MySQL8.0之前的版本,默认字符集为latin1,8.0及之后默认为utfmb3.utfmb4,如果以前的版本忘记修改默认的密码,就会出现乱码的问题. 1.1 修改步骤 修改 ...