我正在尝试确定是否有可能在不使用go工具更新go.mod文件的情况下运行go mod供应商。
我专门go get package/subpackage@commit
并用正确的版本提交go.mod
。
然后我运行go mod vendor
,它会自动更改我刚刚设置的软件包的版本。
我需要使用供应商,因为我运行的脚本可以编辑某些供应商的部门。我正在查看以下构建流程:
GO111MODULE=on go get package/subpackge@commit
GO111MODULE=on go mod vendor
./Script/patch_vendors.sh --write
GO111MODULE=off go build
我的另一种选择是修改复制的源代码,无论供应商将其下载到何处,但是 不知道该如何处理。
预先感谢
答案 0 :(得分:1)
每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 all
,go test all
和go mod tidy
都对模块的要求进行了相同的编辑。