9

我试图弄清楚是否可以在没有 go 工具更新我的 go.mod 文件的情况下运行 go mod vendor。

我专门用正确的版本go get package/subpackage@commit提交了我的。go.mod

然后我运行go mod vendor它,它会自动调整我刚刚专门设置的包的版本。

我查看了此页面无济于事:https ://github.com/golang/go/wiki/Modules#how-do-i-use-vendoring-with-modules-is-vendoring-going-away

我需要使用供应商,因为我运行了一个编辑一些供应商部门的脚本。我正在查看以下构建流程:

GO111MODULE=on go get package/subpackge@commit
GO111MODULE=on go mod vendor
./Script/patch_vendors.sh --write
GO111MODULE=off go build

我的另一个选择是修改复制的源,无论 go mod 供应商将其下载到何处,但不知道如何处理。

提前致谢

4

1 回答 1

2

根据https://tip.golang.org/cmd/go/#hdr-Maintaining_module_requirements

go命令本身会自动更新go.mod文件以保持标准格式和require语句的准确性。

任何找到不熟悉的导入的 go 命令都会查找包含该导入的模块,并自动将该模块的最新版本添加到 go.mod 中。[…]

任何 go 命令都可以确定缺少模块要求并且必须添加 […]。

go mod vendor命令复制包及其测试的所有传递导入,因此它将自动更新go.mod文件以确保所有导入的包都存在。

所以这里的问题很可能是commit您选择的package/subpackage未能提供出现在程序的传递导入中的某些包。如果这是正确的,您应该会发现go list allgo test allgo mod tidy都对您的模块要求进行相同的编辑。

于 2019-08-02T18:36:03.403 回答