主要记录了go语言依赖管理的重点知识点:gopath弊端和go mod的指令和环境变量
参考材料:青训营课件,刘丹冰课件(补充)
GOPATH & Go Mod
GOPATH
弊端:
- 没有版本控制概念:
go get不能拉取指定版本,也不能存放版本信息 - 无法保证和别人的代码同步第三方版本
- 无法指定当前项目import的第三方版本号
- 如果文件不在$GOPATH/src下则不能编译
Go Modules
指令
| 常见go mod 指令 | 用途 |
|---|---|
go mod help | 获得目前版本支持的指令 |
go mod init | 生成go.mod文件 |
go mod vendor | 导出项目所有依赖包到vendor directory |
go mod download | 下载go.mod文件中的所有依赖 |
go mod tidy | 整理现有依赖 |
go mod graph | 查看目前依赖结构 |
go mod edit | 编辑go.mod |
go mod verify | 检查一个模块有没有被篡改过 |
go mod why | 查看为什么需要依赖某个模块 |
修改项目模块的依赖关系
go mod edit -replace=新的版本号后go.mod文件就会被修改
这个指令适用于由于有新的版本,想要改变现有go.mod的版本号的情况
基础环境变量
以下记录几个比较重要的go mod环境变量:
GO111MODULE
作为go mod的开关,有3种值可以设置:
auto(默认值): 只要项目包含go.mod就启用go modon:强制启动go mod (推荐设置)off: 禁用go mod(假如想用gopath的话)
通过$ go env -w GO111MODULE=on设置
GOPROXY
用于设置go mod代理,可以直接通过镜像站点/第三方托管平台来快速通过import拉取包(比如github上的)
目前默认值: GOPROXY="https://proxy.golang.org,direct"
direct表示托管平台中如果找不到的话,会去源地址拉取
也可以用过$ go env -w GOPROXY=来设置
GOSUMDB (Go checksum database)
在拉取模块版本时,保证拉取到的版本数据未经过修改/完整的;如果不一致就立马中止
默认值: sum.golang.org
go.sum会储存所有检查并给zip文件生成的hash值
GONOPROXY/GONOSUMDB/GOPRIVATE
用在当前项目有依赖private repo的情况下,绕过goproxy和gosumdb来拉取,不然如果用proxy, sumdb会由于repo的私有性拉取失败(比如说项目依赖于学校/同学/公司私有的repo)
GOPRIVATE的值默认覆盖另外两个,通过go env -w GOPRIVATE=<地址>
初始化项目流程
- 开启go mod:
go env -w GO111MODULE=on mkdir创建dir并cd进对应项目dirgo mod init github.com/annadai/项目名- 编写程序
go get下载依赖的包,go.mod会自动保存依赖包的信息,go.sum也会同步更新 or 让程序自动down import的依赖包