Go module 使用指南


Go Mod 命令
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 help mod来查看
设置 GO111MODULE
可以用环境变量 GO111MODULE 开启或关闭模块支持 它有三个可选值:off、on、auto 默认值是 auto
GO111MODULE=off 无模块支持 go 会从 GOPATH 和 vendor 文件夹寻找包
GO111MODULE=on 模块支持 go 会忽略 GOPATH 和 vendor 文件夹 只根据 go.mod 下载依赖
GO111MODULE=auto 在 GOPATH/src 外面且根目录有 go.mod 文件时 开启模块支持
使用模块时 GOPATH 是无意义的 不过它还是会把下载的依赖储存在
GOPATH/pkg/mod 中 也会把 go install 的结果放在 $GOPATH/bin 中
Mod Cache 路径在GOPATH/pkg/mod/cache下面

Go Mod 使用

创建 go.mod 文件
在一个新的项目中 需要执行go mod init 来初始化创建文件go.mod go.mod 中会列出所有依赖包的路径和版本
module github.com/my/thing
require (
github.com/some/dependency v1.2.3
github.com/another/dependency/v4 v4.0.0  // indirect
)
indirect 表示这个库是间接引用进来的
go mod vendor 命令可以在项目中创建 vendor 文件夹将依赖包拷贝过来
go mod download 命令用于将依赖包缓存到本地Cache起来
显示所有Import库信息
go list -m -json all
-json JSON格式显示
all 显示全部库

Go module常见问题

启用Go模块以后 使用go get xxx时会报错提示
"go: cannot find main module; see 'go help modules'"
因为没有找到go.mod文件 所以会报错
只要在项目根目录下生成一个go.mod文件就可以了
如何在Go模块里使用本地依赖包
首先在项目的go.mod文件的require处添加依赖包
然后在replace处添加替换本地依赖包(路径要处理妥当)
比如
require (
mytest v0.0.0
)
replace (
mytest v0.0.0 => ../mytest
)
tips
如果在下载一些墙外的包可设置代理
export GOPROXY="https://athens.azurefd.net"
export GO111MODULE=on
用 golang module 做项目版本管理 //studygolang.com/articles/13895
Go模块官方文档(英文)  //links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fgolang%2Fgo%2Fwiki%2FModules
Go模块命令说明(英文)  //links.jianshu.com/go?to=https%3A%2F%2Fgolang.google.cn%2Fcmd%2Fgo%2F%23hdr-Module_maintenance