「Go Tips」go mod 包管理

2022-09-27
1分钟阅读时长

简单收集下 Go 包管理中 go mod 常用命令备查

# 确保 GO111MODULE 不为 off。
go env
GO111MODULE=off: 不使用 modules 功能。
GO111MODULE=on: 使用 modules 功能,不会去 GOPATH 下面查找依赖包。
GO111MODULE=auto: Golang 自己检测是不是使用 modules 功能。(默认)

# 新项目初始化 
go mod init <project_name>

# 拉取模块包
go mod download  # 只下载依赖包
go mod tidy  # 拉取必须模块,移除不用的模块


# 依赖包收集到项目目录方便编辑器识别
go mod vendor  # 会在项目根目录生成 vendor 目录

# 拉取某个报的特定版本,会自动添加到 go.mod 文件中
go get package@version

go.mod 关键字

module:用于定义当前项目的模块路径
go:用于设置Go 版本信息
require:用于设置一个特定的模块版本
exclude:用于从使用中排除一个特定的模块版本
replace:用于将一个模块版本替换为另一个模块版本


indirect  间接依赖

go mod 存储问题

GOPATH模式下,依赖包存储在$GOPATH/src,该目录下只保存特定依赖包的一个版本。

GOMODULE模式下,依赖包存储在$GOPATH/pkg/mod,该目录中可以存储特定依赖包的多个版本(go get 指定下载多个版本)

$GOPATH/pkg/mod目录下有个cache目录,它用来存储依赖包的缓存,简单说,go命令每次下载新的依赖包都会在该cache目录中保存一份

go 模块查找顺序

gomodule 模式下:

vendor  >  $GOPATH/pkg/mod > $GOPATH

gopath 模式下:

$GOPATH

一些可参考的文档