gpt4 book ai didi

go - 使用 'go build' 获取依赖项,即使它们位于 vendor/

转载 作者:行者123 更新时间:2023-12-01 21:09:46 25 4
gpt4 key购买 nike

我正在尝试获取 Go 项目并复制 vendor/ 下的依赖项目录,所以我在我的项目中拥有项目的完整源代码及其依赖项。但是,即使在这样做之后,删除 $GOPATH/pkg/mod 下的包重建会导致 Go 编译器重新获取所有依赖项,这需要相当长的时间。
这就是我所做的:

# Fetch the project, e.g. influx/telegraf
go get -d github.com/influxdata/telegraf

# CD into the project
cd $GOPATH/src/influxdata/telegraf

# Fetch the modules under vendor/ directory
go mod vendor
调用最后一条命令后,Go 将获取 pkg/mod 下的所有依赖项.不知道为什么这样做,但我认为是因为它需要正常构建项目,然后将获取的依赖项移动到 vendor/ 下文件夹。之后,我可以成功构建。但是,为了确保不再需要这些依赖项,我删除了 pkg/mod完全目录并重建项目。出于某种原因,Go 编译器再次获取了包。
有什么我做错了吗?
谢谢!

最佳答案

vendor文件夹并非在所有情况下都自动使用。
要确保从主模块的 vendor 文件夹加载依赖项,请传递 -mod=vendor转到 go 工具。vendor如果 go 版本由 -mod=mod 指定,则仅自动使用文件夹(如果存在)(如果未使用 go.mod 另行指定)文件是 1.14或更高。
这些在 Command go: Maintaining module requirements 中有详细说明:

If invoked with -mod=vendor, the go command loads packages from the main module's vendor directory instead of downloading modules to and loading packages from the module cache. The go command assumes the vendor directory holds correct copies of dependencies, and it does not compute the set of required module versions from go.mod files. However, the go command does check that vendor/modules.txt (generated by 'go mod vendor') contains metadata consistent with go.mod.

If invoked with -mod=mod, the go command loads modules from the module cache even if there is a vendor directory present.

If the go command is not invoked with a -mod flag and the vendor directory is present and the "go" version in go.mod is 1.14 or higher, the go command will act as if it were invoked with -mod=vendor.

关于go - 使用 'go build' 获取依赖项,即使它们位于 vendor/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62685783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com