golang内置包管理工具go-mod简明教程

4次阅读

共计 1102 个字符,预计需要花费 3 分钟才能阅读完成。

go mod

go buildin package manager.

go mod 是 go 语言内置的包管理工具,集成在 go tool 中,安装好 go 就可以使用。

要求: go version >= 1.11

官方文档:https://tip.golang.org/cmd/go…

环境变量

# 通过环境变量 GOPROXY 设置代理
export GOPROXY=https://goproxy.io

# go mod 功能开关,默认是 auto,在 gopath 中不启用
# 可设置为 on 强制启用
export GO111MODULE=on

初始化 go mod init

init 报错 outside gopath no import comments

# 方法一 手动创建 go.mod 文件,写入 module xxx
echo 'module xxx' > go.mod

# 方法二 main 包加入 import 声明
package main // import "xxx"

go mod download

下载依赖

go mod tidy

同步依赖包,添加需要的,移除多余的

go mod vendor

将依赖包放入 vendor

go get 下载 / 升级依赖

go mod 不再下载源码进 $GOPATH/src

go mod 的下载目录在 $GOPATH/pkg/mod,并且是文件权限是只读的 -r--r--r--

# tag 必须以 v 开头 v1.2.3 格式
go get -u xxx.com/pkg@2.1.0

vendor 模式

go mod 是不推荐使用 vendor 目录的,而是直接使用 source 或 cache 中的包。

在根目录有 vendor 文件夹时默认使用 vendor 模式。此模式下依赖只从 vendor 中找。

https://github.com/golang/go/…

# vendor 模式下 get 报错:go get: disabled by -mod=vendor

# mod 有三个取值
# mod can be '','readonly', or'vendor'
# 两种赋值方式都可以
-mod=''-mod''

replace

让原本依赖的 github.com/repo/pkg 包,实际使用 github.com/your-fork/pkg@version。

go mod edit -replace github.com/repo/pkg=github.com/your-fork/pkg@version

清缓存

go clean -modcache

go.mod & go.sum

go.mod:依赖列表和版本约束。

go.sum:记录 module 文件 hash 值,用于安全校验。

最佳实践

go mod 不推荐使用 vendor,不要将 vendor 提交到版本控制。

提交 go.mod,可以忽略 go.sum,因为会根据校验 sum 跨平台可能报错。

正文完
 0