这是我参与「第五届青训营」伴学笔记创作活动的第四天
- 实际工程开发中我们不会基于标准库实现从0~1编码
- 我们更需要直接引入SDK来开发,涉及到依赖库的管理,如framework,log,driver等
依赖管理系统
- 如图,这是一个Go项目运行成功后的控制台截图
GOPATH
- GOPATH即Go项目工作区
GOROOT:即Go项目工作区所在的文件夹
bin:用于项目编译的二进制文件
pkg:项目编译过程中的中间产物,加速编译
src:项目源码所在文件夹,项目代码直接依赖该文件夹中的源码,而且go get直接下载最新的包到该目录下
- 弊端:在不同项目可能依赖package的不同版本,因此在package更新后可能会构建不成功
Go Vender
项目目录下增加Vender文件,所有依赖包副本形式存放在该处,旨在解决不同项目对package不同版本的依赖
- 依赖寻址方式:VenderGOPATH(即
- 如图项目A依赖V1版本,在package更新后,在Vender中保留V1版本,在需要调用时则在Vender中寻找,若没有则到GOPATH目录下寻找)
- 弊端:
(1) 无法控制依赖的版本
(2) 更新项目出现版本冲突,无法编译
依赖管理三要素
实现定义版本规则和项目依赖管理的终极目标
- go.mod: 配置文件,管理依赖
- proxy: 中心仓库管理依赖库
- go get/mod: 本地工具
Go module
选择能兼容更低版本的项目,比如编译C项目使用v1.4
Proxy
即URL列表,用逗号分割开,用于依赖的分发
Proxy可有效降低第三方代码托管平台压力,保证依赖可靠性