今天我们来聊聊Go语言的依赖管理神器——Go Modules。
自从Go 1.11版本引入以来,Go Modules 已经成为了Go语言依赖管理的标准。接下来,我将用简单易懂的语言,带你一步步了解Go Modules的安装、使用和最佳实践。
Go Modules 简介
Go Modules 是Go语言官方推荐的依赖管理工具,它解决了以往使用GOPATH
时遇到的许多问题,如依赖冲突、版本控制等。
GOPATH 目录
在Go Modules问世之前,Go语言使用GOPATH
环境变量来管理项目的工作空间,它包含三个子目录:
bin
:存储编译生成的二进制文件。pkg
:存储预编译的目标文件,加快后续编译速度。src
:存储所有.go
文件或源代码。在编写 Go 应用程序,程序包和库时,一般会以$GOPATH/src/github.com/foo/bar
的路径进行存放。
go mod 命令
Go Modules 通过go mod
命令行工具来管理依赖,你可以使用以下命令来查看所有可用的go mod
子命令:
go help mod
常用 go mod 命令
命令 | 作用 |
---|---|
go mod help | 查看帮助信息 |
go mod init | 初始化当前文件夹,生成 go.mod 文件 |
go mod download | 下载 go.mod 文件中指明的所有依赖到本地(默认为 |
go mod tidy | 整理现有的依赖,执行时会把未使用的 module 移除掉,同时也会增加缺少的包 |
go mod graph | 查看现有的依赖结构图 |
go mod edit | 编辑 go.mod 文件,比如修改项目中使用的 go 版本 |
go mod vendor | 导出项目所有的依赖到 vendor 目录(需要执行 go build -mod=vendor 才可以使用 vendor 作为依赖来编译,但是在 v1.14 及以后的版本中,如果 golang 项目根目录下存在 vendor 目录,go build 命令会默认优先基于 vendor 目录缓存的三方依赖包构建 golang 程序,除非我们在 go build 命令后面加上 -mod=mod 参数) |
go mod verify | 校验一个模块是否被篡改过,校验从 GOPROXY 服务器上下载的 zip 文件与 GOSUMDB 服务器下载下来的哈希值,是否匹配。 |
go mod why | 查看为什么需要依赖某模块,比如 |
go clean -modcache | 可以清空本地下载的 Go Modules 缓存 (会清空 |
go mod 环境变量
Go Modules 与一些环境变量紧密相关,这些环境变量可以调整Go Modules的行为。
GO111MODULE
GO111MODULE
控制模块支持的开启状态。
auto
:项目包含go.mod
文件时启用Go modules(默认值)。on
:总是启用Go modules。off
:禁用Go modules。
设置方法:
代码语言:shell复制go env -w GO111MODULE=on
GOPROXY
GOPROXY
用于设置Go模块代理,加速模块下载。
默认值:https://proxy.golang.org,direct
设置国内镜像站点:
代码语言:shell复制# 1. 七牛 CDN
go env -w GOPROXY=https://goproxy.cn,direct
# 2. 阿里云
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
# 3. 官方
go env -w GOPROXY=https://goproxy.io,direct
GOSUMDB
GOSUMDB
用于确保下载的模块版本未被篡改。
默认值:sum.golang.org
国内用户可以通过设置GOPROXY
来间接访问GOSUMDB
。
GONOPROXY/GONOSUMDB/GOPRIVATE
这些环境变量用于处理私有模块。
GONOPROXY
:设置不走Go Proxy的URL规则。GONOSUMDB
:设置不检查哈希的URL规则。GOPRIVATE
:设置私有模块的URL规则。
通常,设置GOPRIVATE
即可:
go env -w GOPRIVATE=git.example.com
使用 Go Modules 初始化项目
代码语言:shell复制# 开启 Go Modules 模块
go env -w GO111MODULE=on
# 创建项目目录
mkdir -p $HOME/modules_test
cd $HOME/modules_test
# 初始化 go.mod 文件
go mod init github.com/pudongping/moudles_test
# 下载依赖库
go get -v github.com/pudongping/test_moudles
总结
通过今天的学习,我们了解了Go Modules的基本使用方法,包括环境变量的配置、项目的初始化、依赖的下载和更新等。Go Modules作为Go语言官方推荐的依赖管理工具,极大地简化了项目管理的复杂性。