Go Module

自从 Go 官方从去年推出 1.11 之后,增加新的依赖管理模块并且更加易于管理项目中所需要的模块。模块是存储在文件树中的 Go 包的集合,其根目录中包含 go.mod 文件。 go.mod 文件定义了模块的模块路径,它也是用于根目录的导入路径,以及它的依赖性要求。每个依赖性要求都被写为模块路径和特定语义版本。

从 Go 1.11 开始,Go 允许在 $GOPATH/src 外的任何目录下使用 go.mod 创建项目。在 $GOPATH/src 中,为了兼容性,Go 命令仍然在旧的 GOPATH 模式下运行。从 Go 1.13 开始,模块模式将成为默认模式。

启用Go Modules

go env -w GO111MODULE=on # 111代表版本1.11
go env -w GOPROXY=https://goproxy.io # 配置代理
# go env -w GOPROXY=https://goproxy.cn

使用 go env 可以查询所有的环境变量,用于确认当前的配置

创建一个新模块

# 创建项目目录
$ mkdir backend && cd backend

# 初始化模块,将会生成go.mod文件
$ go mod init backend
go: creating new go.mod: module backend

$ ll
total 8
-rw-r--r--  1 yangsx  staff    24B  9 17 13:32 go.mod

$ cat go.mod
module backend # init命令指定的项目名称

go 1.17 # 当前项目版本号

添加依赖项

indirect注释

在执行命令go mod tidy时,Go module 会自动整理go.mod 文件,如果有必要会在部分依赖包的后面增加// indirect注释。一般而言,被添加注释的包肯定是间接依赖的包,而没有添加// indirect注释的包则是直接依赖的包,即明确的出现在某个import语句中。

查询该mod的依赖项

升级/回退依赖

整理依赖项

如果项目中的一些依赖没有下载,或者有一些代码没有使用到的依赖,可以使用如下方式对依赖整理:

下载依赖项

下载依赖到本地的cache路径,cache路径为GOMODCACHE:

排除/替换依赖

或者使用go mod edit命令进行操作。

版本管理文件:go.sum

主要为了防止包被恶意篡改,比如有一天gin1.14.1的版本在不知情的情况下被恶意修改了,这时,虽然路径与版本号没变,但是预期hash变化了,就会被go mod verify发现。

最后更新于

这有帮助吗?