[Go] Golang 官方包管理工具 mod 使用
Contents
golang 1.11 开始新加入mod特性
mod用来替换旧版本基于GOPATH来指定构建项目的方式。
使用介绍
- golang版本需要1.11或以上版本
- 设置
GO111MODULE
参数
GO111MODULE=off
: 关闭mod模式使用GOPATH方式GO111MODULE=on
: 使用mod模式不使用GOPATH方式,不去GOPATH路径查找GO111MODULE=auto
: 默认值,根据当前目录是否存在go.mod文件来判断,如果go.mod文件中没有包含会去GOPATH路径查找
go mod
使用帮助详解
|
|
使用语法
go mod <command> [arguments]
download
: download modules to local cache (下载依赖的module到本地cache)edit
: edit go.mod from tools or scripts (编辑go.mod文件)graph
: print module requirement graph (打印模块依赖图)init
: initialize new module in current directory (再当前文件夹下初始化一个新的module, 创建go.mod文件)tidy
: add missing and remove unused modules (增加丢失的module,去掉未用的module)vendor
: make vendored copy of dependencies (将依赖复制到vendor下)verify
: verify dependencies have expected content (校验依赖)why
: explain why packages or modules are needed (解释为什么需要依赖)
使用go run
或go build
后项目目录下会存在两个文件:
go.mod
是描述直接依赖包go.sum
是描述依赖树锁定
go.mod 提供了module
, require
、replace
和exclude
四个命令
module
语句指定包的名字(路径)require
语句指定的依赖项模块replace
语句可以替换依赖项模块exclude
语句可以忽略依赖项模块
go get
go get命令可以指定版本或tag升级依赖,并会自动更新go.mod文件
tag必须是语义化的、带v前缀的版本号
使用示例:
|
|
go get 升级
-
运行 go get -u 将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
-
运行 go get -u=patch 将会升级到最新的修订版本
-
运行 go get package@version 将会升级到指定的版本号version
-
运行go get如果有版本的更改,那么go.mod文件也会更改
-
使用命令
go list -m -u all
来检查可以升级的package, -
使用
go get -u need-upgrade-package
升级后会将新的依赖版本更新到go.mod -
使用
go get -u
升级所有依赖
go build
-
go build -mod=readonly
防止隐式修改 go.mod,如果遇到有隐式修改的情况会报错,可以用来测试 go.mod 中的依赖是否整洁,但如果明确调用了 go mod、go get 命令则依然会导致 go.mod 文件被修改。 -
go build -mod=vendor
在开启模块支持的情况下,用这个可以退回到使用 vendor 的时代。
goproxy
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
# 设置不走 proxy 的私有仓库,多个用逗号相隔(可选)
go env -w GOPRIVATE=*.corp.example.com
# 设置不走 proxy 的私有组织(可选)
go env -w GOPRIVATE=example.com/org_name