go语言进阶部分-依赖管理 | 青训营笔记

41 阅读1分钟

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

依赖配置-incompatible

依赖配置-依赖图

依赖分发-回源

依赖分发-Proxy

依赖分发-环境变量 GOPROXY

工具-go get

工具-go mod