当我尝试构建 Go 代码时,出现了一个奇怪的错误。
$ make install
go version go1.16 windows/amd64
bin/check_go_version 1.14.4
plugin/loader/preload.sh > plugin/loader/preload.go
go fmt plugin/loader/preload.go >/dev/null
go install "-asmflags=all='-trimpath=C:\Users\Deepak Dash\go\src'" "-gcflags=all='-trimpath=C:\Users\Deepak Dash\go\src'" -ldflags="-X "github.com/ipfs/go-ipfs".CurrentCommit=8f9a2b7-dirty" ./cmd/ipfs
cmd\ipfs\daemon.go:32:2: module github.com/ipfs/go-saas-endpoint provides package github.com/ipfs/go-saas-endpoint and is replaced but not required; to add it:
go get github.com/ipfs/go-saas-endpoint
make: *** [cmd/ipfs/Rules.mk:37: cmd/ipfs-install] Error 1
Run Code Online (Sandbox Code Playgroud)
我之前曾与 go.mods 合作过。我已经用本地模块替换了 GitHub 包。它正在检测本地包。
谢谢,迪帕克·达什
这是一个 Go 1.16 问题,目前正在golang/go问题 44529中进行调查
其中包括Jay Conrod 的评论:
\n\n\n\n
go mod tidy并且go get都可能会访问网络来查找任何所需模块未提供的导入包。
\n如果在本地替换模块,go 命令将首先查找那里,但我认为它仍然可能会到网络中查找模块路径的其他前缀。相反,您可以在替换不存在的版本时添加该版本的要求:
\nRun Code Online (Sandbox Code Playgroud)\ngo mod edit -require example.com/mod@v0.0.0-local -replace example.com/mod@v0.0.0-local=../local\n添加替换模块,即使左侧没有版本,也不会自动将该模块添加到构建列表中。
\n
\n如果是,该go命令将读取其go.mod文件并应用其要求。即使替换的模块不提供任何软件包,这也可能会影响其他模块的选定版本。
来自 Google 的 Bryan C. Mills 补充道:
\n\n\n\n
go mod tidy如果可以添加替换模块,则永远不应该进行网络查找。(看import.go#queryImp())\n
go get另一方面,将执行网络查找,以识别真正的最新版本,同时考虑您的替换 (query.go#Versions()),然后该版本将被替换而不是下载。
\n这样做是为了让 go get 添加的最新版本始终与 一致go list -m [\xe2\x8b\xaf]@latest,并且(如果可能)您的 require 指令始终为下游消费者(如果有)指定有效版本,这样它们就不会在以下情况下中断:他们需要你的模块。(下游消费者不会接受您的替换指令,因此他们需要有效的版本。)如果您没有对相关存储库使用代理,则该查找可能涉及克隆上游存储库。所以这可能是一个相当昂贵的操作。(请注意,官方发行版默认使用 go 命令
\nproxy.golang.org,但该go命令的 Fedora 分支则没有。)如果网络查找失败,那么
\ngo get也会回退到替换版本 (query.go#Latest())