管理package
go module
- module解决的问题
- 多版本的工程代码无法隔离
- 对于
GOPATH
的强制依赖约束
- 无法自动化下载依赖
常用命令
go mod init xxxx
go mod tidy
go mod edit [-require/-replace/retract...]
go clean -modcache
go get xyz@v
go get ./...
go get -u xyz
go get -u=patch xyz
go mod graph
go mod why -m x.y.z@v
go list -m all
go list -u -m x.y.z
go list -m -versions x.y.z
代码组织形式
- 开启module模式后,项目不再一定要组织在
GOPATH
路径下,可以任意定义项目目录
- 此后
$GOPATH/src
基本上没有意义了
- 通过
go env -w GO111MODULE=on
开启
- 所有依赖包的源码也不再是组织在
src
目录下,而是$GOPATH/pkg/mod
目录下
- 该目录下的包名后面还会有
@<tag_num>
,这样go mod
就可以区分不同版本
- 例如
$GOPATH\pkg\mod\github.com\go-sql-driver\mysql@v1.5.0
- 而
$GOPATH/pkg/mod/cache/download
目录下包含了原始的下载缓存

- 如果被引用代码的版本号没变,但是代码变动了,需要清除所有本地依赖缓存后,才会重新拉取远端的代码
- 即通过
go clean -modcache
清除$GOPATH/pkg/mod
目录下的所有缓存文件
- 在做实验或者代码版本管理比较乱的时候,可能会出现的这种情况
依赖记录(go.mod)
module github.com/example/module-repo
go 1.13
require (
example.com/apple v0.1.2
example.com/banana v1.2.3
example.com/banana/v2 v2.3.4
example.com/pear v1.1.1
example.com/strawberry v2.1.1+incompatible
example.com/orange v0.0.0