如何解决找到并替换了 Go 模块,但不是必需的
当我尝试构建我的 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
我以前使用过 go.mods。我已经用本地模块替换了 github 包。并检测本地包。
谢谢, 迪帕克冲刺
解决方法
这是一个 Go 1.16 问题,目前在 golang/go
issue 44529
go mod tidy
和 go get
都可能访问网络以查找任何所需模块未提供的导入包。
如果模块在本地被替换,go 命令会先在那里查找,但我认为它仍然可能会去网络查找模块路径的其他前缀。
相反,您可以在替换该版本时对不存在的版本添加要求:
go mod edit -require example.com/mod@v0.0.0-local -replace example.com/mod@v0.0.0-local=../local
添加替代品,即使左侧没有版本,也不会自动将该模块添加到构建列表中。
如果是,go
命令将读取其 go.mod
文件并应用其要求。这可能会影响其他模块的选定版本,即使被替换的模块没有提供任何包。
Bryan C. Mills from Google adds:
如果go mod tidy
可以添加替换模块,则永远不应该进行网络查找。 (见import.go#queryImp()
)
go get
将执行网络查找以识别真正的最新版本,并考虑您的替换(query.go#Versions()
),然后该版本将被替换而不是已下载。
这样做是为了让 go get 添加的最新版本始终与 go list -m [⋯]@latest
一致,并且(如果可能)您的 require 指令始终为下游消费者(如果有)指定一个有效版本,以便他们不会当他们需要您的模块时中断。 (下游消费者不会接受您的替换指令,因此他们需要一个有效的版本。)
如果您没有为相关存储库使用代理,则该查找可能涉及克隆上游存储库。所以这可能是一个非常昂贵的操作。 (请注意,go 命令的官方发行版默认使用 proxy.golang.org
,但 go
命令的 Fedora fork 没有。)
如果该网络查找失败,那么 go get
也会回退到替换版本 (query.go#Latest()
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。