Go Module原理
Go Module原理
Go
Semantic Version
版本号遵循SemVer规范
(https://semver.org/)
最小版本选择(Minimal Version Selection)
Go 1.11之前
GOROOT GOPATH
GOPATH
├── bin //编译生成的二进制文件
├── pkg //预编译文件,以加快程序的后续编译速度
|── src //所有源代码
├── github.com
...
...
缺点:
- 缺少版本管理
go1.5 vendor
go.mod
go1.11 已经有go mod,只是默认关闭,在go1.13 go mod将作为默认管理方式开启
module
require
replace
replace可以指向一个repo,也可以指向本地
exclude
排除某个版本,实际中很少使用
GOPROXY
地址 简介 https://goproxy.io 一个全球代理为 Go 模块而生 https://mirrors.aliyun.com/goproxy/ 阿里镜像代理 https://goproxy.cn 七牛云赞助支持的
go.sum
用于记录每个依赖包的哈希值(SHA-256 算法) 正常情况下,每个依赖包版本会包含两条记录,第一条记录为该依赖包版本整体(所有文件)的哈希值,第二条记录仅表示该依赖包版本中 go.mod 文件的哈希值,如果该依赖包版本没有 go.mod 文件,则只有第一条记录
go list -m all
查看当前项目最终所使用的 module 版本
go list -u -m all
查看依赖的新版本
go get -u ./...
更新所有依赖到最新版
go get -u=patch ./...
更新所有依赖到最新的 patch 版本
go mod tidy
清理 go.mod/go.sum 中不在需要的 module
go mod vendor
创建 vendor 依赖目录,这时为了与之前做兼容,后面在执行 go test/build 之类的命令时,可以加上 -mod=vendor 这个 build flag 声明使用 vendor 里面的依赖,这样 go mod 就不会再去 $GOPATH/pkg/mod 里面去找。