前言
gomodule
gomodulego vendorgo path
gomodule
go pathgovendorgomodule
这也是我想写一篇文章总结的原因(万一有一天go module也不推荐使用了呢!这种演变的思路值得了解),看过之后保证你能看懂别人文章中写的GOPATH/src、GOPATH/bin、GOPATH/pkg/mod云云,我们开始。
两个命令
go install xxx(下载xxx第三方二进制可执行文件 )
go get xxx(下载xxx第三方依赖包)
下载可执行文件/第三方依赖到本地哪里?不同的包管理工具不同,下面讲。
两个路径
- GOROOT:go的安装目录,类似java的jdk,存放一些内置的开发包和工具。
- GOPATH:go指定的工作空间,用于保存go项目的代码和第三方依赖包。
三个包管理工具
go path【不推荐使用】
GOPATH/srcgo build xxxgo install xxxgogetxxxGOPATH/srcGOPATH/binGOPATH/pkg
gogetGOPATH/srcGOPATH
GOPATHgoget会将代码拉取到GOPATH/src
govendor【不推荐使用】
GO15VENDOREXPERIMENTGovendorgo build/vendorvendorvendorGOPATHGOROOT
优势:因为将第三方依赖完全和工程整合,使得项目构建速度快,且可以工作在无法连接外网的CI/CD流程中。
问题:放弃了依赖重用,使得冗余度上升
下载:go install github.com/kardianos/govendor(govendor是第三方可执行文件,下载可执行文件用go install,用go get也行,但是会有告警)。
govendor--help
然后我在govendor的代码库中看到了下面这段话:👇(这个README还是两年前更新的,而且这个库已经很久不维护了,嗯...)。
go module
GOMODULEGOPATH/pkg/modGOPATH/binGOPATH
GOMODULEGOPATHgo.modGOPATH
GOPATH/src
mac:(windows类似)
go mod命令:go help mod查看相关帮助命令(govendor是第三方可执行文件,但是go mod命令是go自带的,不用额外go install)
GO111MODULE=onGOPATH/pkg/modGOPATH/bin
go mod vendor:
GOMODULE
事实上,如果你需要使用vendor模式管理包,说明一定属于如下两种情况:
GOPATHGO MODULE