go mod常用命令

1 介绍(go mod)

1.1、go mod是什么

  go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。

  之前Golang 主要依靠vendor和GOPATH来管理依赖库,vendor相对主流,但现在官方更提倡go mod。

1.2、go mod初始化及使用

下载官方包1.11(及其以上版本将会自动支持gomod) 默认GO111MODULE=auto(auto是指如果在gopath下不启用mod)
Golang 提供一个环境变量 GO111MODULE 来设置是否使用mod,它有3个可选值,分别是off, on, auto(默认值),具体含义如下:

off: GOPATH mode,查找vendor和GOPATH目录
on: module-aware mode,使用 go module,忽略GOPATH目录
auto: 如果当前目录不在$GOPATH 并且 当前目录(或者父目录)下有go.mod文件,则使用 GO111MODULE, 否则仍旧使用 GOPATH mode。

修改 GO111MODULE 的值的语句是:set GO111MODULE=on 。

在使用模块的时候, GOPATH 是无意义的,不过它还是会把下载的依赖储存在 GOPATH/src/mod 中,也会把 go install 的结果放在 GOPATH/bin(如果 GOBIN 不存在的话)

go mod download 下载模块到本地缓存,缓存路径是 $GOPATH/pkg/mod/cache
go mod edit 是提供了命令版编辑 go.mod 的功能,例如 go mod edit -fmt go.mod 会格式化 go.mod
go mod graph 把模块之间的依赖图显示出来
go mod init 初始化模块(例如把原本dep管理的依赖关系转换过来)
go mod tidy 增加缺失的包,移除没用的包
go mod vendor 把依赖拷贝到 vendor/ 目录下
go mod verify 确认依赖关系
go mod why 解释为什么需要包和模块

注意有几个坑的地方:

go mod 命令在$GOPATH 里默认是执行不了的,因为 GO111MODULE 的默认值是 auto。默认在$GOPATH 里是不会执行, 如果一定要强制执行,就设置环境变量为 on。

go mod init 在没有接module名字的时候是执行不了的,会报错 go: cannot determine module path for source directory。可以这样执行:

$ go mod init github.com/jiajunhuang/hello

否则就要在 main.go 里加上导入声明,例如:

$ cat main.go
package main
 
func main() {
    println("Hello world")
}
$ go mod init
go: cannot determine module path for source directory /Users/jiajun/hello (outside GOPATH, no import comments)
$ vim go.mod
$ cat go.mod
module github.com/jiajunhuang/hello
$ go mod init
go mod init: go.mod already exists
$ rm go.mod
$ vim main.go
$ cat main.go
package main // import "github.com/jiajunhuang/hello"
 
func main() {
    println("Hello world")
}
$ go mod init
go: creating new go.mod: module github.com/jiajunhuang/hello
$ ls
go.mod  main.go
$ cat go.mod
module github.com/jiajunhuang/hello

当然,如果在已有代码的仓库里执行是不存在这个问题的。

2 命令

2.1 指定module的根目录并生成go.mod文件

go mod init example.com/hello

2.2 下载并添加依赖到go.mod文件中

go build, go test

2.3 查看module下的所有依赖

go list -m all

2.4 更新稳定版依赖

go get rsc.io/sampler

2.5 更新为指定版本依赖

go list -m -versions rsc.io/sampler
 
rsc.io/sampler v1.0.0 v1.2.0 v1.2.1 v1.3.0 v1.3.1 v1.99.99
 
go get rsc.io/sampler@v1.3.1

2.6 清理无用的依赖

go mod tidy

2.7 将依赖复制到项目路径的vendor文件夹中

go mod vendor

2.8 忽略cache里的包,只使用vendor目录里的依赖进行编译

go build -mod = vendor

2.9 校验依赖并查看是否有修改

go mod verify

原文链接:https://blog.csdn.net/zzhongcy/article/details/97243826
可参考文献:

  1. https://blog.csdn.net/Lazybones_3/article/details/89355133
  2. https://blog.csdn.net/kevinh531/article/details/88691870
  3. https://jiajunhuang.com/articles/2018_09_03-go_module.md.html
  4. https://blog.csdn.net/qq_33296108/article/details/88184060
Go模块(Go Module)是 Go 语言中用于管理依赖的标准机制,它替代了传统的 GOPATH 模式,提供了版本控制、依赖管理以及模块隔离等功能。以下是常用的 `go mod` 命令及其用途。 ### 初始化模块 - `go mod init <module-name>`:初始化一个新的模块,并生成 `go.mod` 文件。`<module-name>` 是模块的导入路径,通常为项目仓库地址,例如 `github.com/username/projectname`[^5]。 ### 构建与依赖管理 - `go build`:构建项目时会自动下载所需的依赖,并生成 `go.sum` 文件记录依赖的校验和。编译后的可执行文件名称默认与模块名相同[^1]。 - `go mod download`:手动下载所有依赖模块到本地缓存目录(默认位于 `$GOPATH/pkg/mod`)[^1]。 - `go mod tidy`:清理未使用的依赖,并添加缺失的依赖。该命令确保 `go.mod` 和项目实际依赖保持一致[^1]。 - `go mod vendor`:将所有依赖复制到项目根目录下的 `vendor/` 文件夹中,便于项目独立打包部署[^3]。 ### 依赖分析与验证 - `go mod graph`:输出当前模块及其所有依赖的模块图谱,显示模块之间的依赖关系[^1]。 - `go mod verify`:验证所有依赖模块的完整性,包括 `go.mod` 中声明的依赖、源代码中引用的依赖以及本地缓存中的依赖。 - `go mod why <module>`:解释为什么某个模块被引入,例如 `go mod why -m github.com/hashicorp/golang-lru`。 ### 模块编辑与版本控制 - `go mod edit`:用于手动编辑 `go.mod` 文件,支持多种子命令进行模块路径、版本替换等操作。例如: - `go mod edit -require github.com/example/pkg@v1.0.0`:添加一个依赖。 - `go mod edit -replace github.com/example/pkg@v1.0.0=../local-pkg`:将某个依赖替换为本地路径[^3]。 - 更多子命令可通过 `go help mod edit` 查看[^1]。 ### 示例:初始化模块并构建 ```bash go mod init github.com/username/myproject go build ``` 执行上述命令后,会生成 `go.mod` 和 `go.sum` 文件,并编译出名为 `myproject` 的可执行文件[^2]。 ### 示例:整理依赖 ```bash go mod tidy ``` 该命令将确保 `go.mod` 中的依赖与项目实际使用的依赖一致,删除无用依赖并添加缺失依赖。 ### 示例:生成 vendor 目录 ```bash go mod vendor ``` 执行后会在当前目录创建 `vendor/` 文件夹,包含所有依赖模块,并生成 `vendor/modules.txt` 记录模块信息。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值