GOPATH
环境变量$GOPATH
目录结构:
- bin 项目编译的二进制文件
- pkg 项目编译的中间产物,加速编译
- src 项目源码
项目代码直接依赖src下的代码
go get下载最新版本的包到src目录下
弊端:
场景:A和B依赖于某一package的不同版本
问题:无法实现package的多版本控制
GO Vendor
项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor
依赖寻址防止:vendor => GOPATH
通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题
此时的项目目录结果
- dao
- handler
- main.go
- service
- vendor
弊端
问题:
- 无法控制依赖的版本
- 更新项目又可能出现依赖冲突,导致编译出错
GO Module
通过go.mod文件管理依赖包版本
通过go get/go mod指令工具管理依赖包
依赖管理的三要素
- 配置文件,描述依赖 go.mod
- 中心仓库管理依赖库 Proxy
- 本地工具 go get/mod
go.mod文件解释
依赖配置-version
依赖配置-indirect
对于一些没有直接导入的模块就会标识为indirect