go mod 依赖包管理

Posted by Jason on Thursday, April 11, 2019

TOC

go mod 包管理

go 依赖包发展历史:

  • gopath 所有依赖包都要通过 go get 命令下载到 GOPATH/src 目录下;
    • 影响显而易见:如何兼容多个项目依赖同一个包不同版本?
  • 引入 vendor,可以将依赖的包安装到项目根目录下 vendor 中。(go>1.5)
    • 项目目录还是需要在 GOPATH/src 下开发、编译。
  • go modules,通过 go mod 命令包的管理,包放在 GOPATH/pkg/mod 目录下
    • 不依赖 vendor,并且向下兼容 vendor 模式;
    • 不依赖 GOPATH 路径;
    • 支持钻石型依赖;

命令

Usage:

	go mod <command> [arguments]

The commands are:

	download    下载指定包到本地 cache 目录
	edit        edit go.mod from tools or scripts
	graph       依赖包结构图
	init        初始化包,新增 go.mod 文件。例如 `go mod init github.com/xxx` 包名为 `github.com/xxx`。
	tidy        清空未使用到的包,并且 download 项目中用到,但是 cache 目录中不存在的包
	vendor      同步包到包根目录下 vendor 中
	verify      验证依赖是否正确
	why         解释包为什么被依赖

依赖包管理

  • 多重依赖包版本选取
    • 针对多重依赖版本的选取,参考1中做了验证会选取依赖最高的版本(待验证);
    • 如果未指定版本,go mod 安装依赖包的原則是先拉最新的 release tag,若无tag则拉最新的commit;
  • 依赖包代理
    • 目前支持通过 GOPROXY 从私有服务器上下载包(待研究);

参考

  1. 初窥Go module
  2. go mod 官方文档
  3. 为 Go module 搭建私服
  4. go mod 源码夜读

「真诚赞赏,手留余香」

Jason Blog

真诚赞赏,手留余香

使用微信扫描二维码完成支付


comments powered by Disqus