0

go install使用 govendor 时,govendor install +local和有什么区别govendor install +vendor,^program

govendor install +vendor,^program说要构建和安装我所有的供应商软件包。但是它将安装到什么地方?它会将我的项目和供应商的命令可执行文件安装到$GOPATH/bin我的项目和供应商的包对象$GOPATH/pkg吗?

govendor install +local说仅在您的存储库中构建所有内容。那么它的真正含义是什么?它会创建vendor/binvendor/pkg吗?

如果我go install在我的项目中运行呢?这与上述两个命令有什么不同?

4

1 回答 1

0

Go 首先是带着一个全新的依赖管理和工作区文件夹结构的想法诞生的。项目所在的位置(在 中)有一个严格的层次结构,$gopath/src/site.com/user/project其他项目只需导入所有其他项目的最新版本。这样做的问题是,如果某些上游项目更改了 API,那么您的项目将莫名其妙地中断。这就是供应商进来的地方。

Vendor 是项目中的一个子目录,其中包含$gopath/src项目导入的所有内容。不同之处在于,当上游项目引入新功能和/或修复时,供应商不会更新。因此,您必须自己更新它。当 go 查找导入时(从最新版本开始),它将首先检查供应商,然后在您的$gopath.

go install将您的$gopath依赖项更新到最新版本;所有新项目和没有供应商的项目都将使用的版本。

govendor install +vendor,^program更新您的特定项目供应商依赖项。这应该在单独的提交中完成;您应该go test; govendor; git commit; go test检查更新是否会破坏您的项目。

govendor install +local显然只是构建项目。

此外,恕我直言,您应该使用 godep 而不是 govendor。IHMO 有更好的工作流程;您$gopath拥有最新版本,然后您可以使用godep update. 它也应该是 golang 1.10 中的标准。

于 2017-07-10T18:25:08.023 回答