go get -d all
曾在某些情况下无法正常工作。
从 Go 1.16 开始,它首先将 all
解析为一个包模式,然后尝试安装每个这样的包的最新版本。如果其中一些包已被删除,它会失败。
在 Go 1.15 及更早版本中,它的行为更接近于 go get -u -t ./...
今天所做的操作:它升级了(部分子集)直接导入的包,然后从那里升级了传递依赖项。
作为解决方法,go get -d -u -t ./...
实现了基本相同的一组升级,但 go get -d all
应该是一个合理的替代方案。
$ go1.17rc1 get -d all
go get all: module google.golang.org/protobuf@upgrade found (v1.27.1), but does not contain package google.golang.org/protobuf/internal/fieldsort
go get all: module google.golang.org/protobuf@upgrade found (v1.27.1), but does not contain package google.golang.org/protobuf/internal/mapsort
$ go1.16.6 get -d all
go get all: module google.golang.org/protobuf@upgrade found (v1.27.1), but does not contain package google.golang.org/protobuf/internal/fieldsort
go get all: module google.golang.org/protobuf@upgrade found (v1.27.1), but does not contain package google.golang.org/protobuf/internal/mapsort
$ go1.15.14 get -d all
go: github.com/google/go-cmp upgrade => v0.5.6
go: google.golang.org/protobuf upgrade => v1.27.1
go: golang.org/x/xerrors upgrade => v0.0.0-20200804184101-5ec99f83aff1
$ go1.17rc1 get -d -u -t ./...
go get: upgraded google.golang.org/protobuf v1.25.0 => v1.27.1
-- go.mod --
module example.com/m
go 1.16
require google.golang.org/protobuf v1.25.0
-- main.go --
package main
import _ "google.golang.org/protobuf/proto"
5条答案
按热度按时间0md85ypi1#
CC @jayconrod@matloob
pvabu6sv2#
由于没有人针对Go 1.16报告这个问题,而且
go get -d -u -t ./...
作为解决方法工作正常,我怀疑它还不够严重,不值得进行回溯移植。(话虽如此,如果修复补丁干净地应用于Go 1.16,我认为回溯移植也是可以的。无论如何,Go 1.15都不会受到影响。)nukf8bse3#
这个问题标记为1.19版本。它只是在里程碑中不断推进。是否应该将其移动到Backlog?
yb3bgrhw4#
https://go.dev/cl/449035提到了这个问题:
all: update all dependencies to @latest
mepcadol5#
请注意,
-d
标志不再存在(它是默认的),但这个错误仍然存在:go get all
首先会识别与all
模式匹配的现有软件包,然后尝试解析它们的传递依赖关系——即使在解析这些依赖关系的过程中,中间步骤最终改变了哪些软件包处于all
中。可能
cmd/go/internal/modget
应该特别对待all
模式,以便在每次迭代时重新解析该模式。