你使用的Go版本是什么( go version
)?
$ go version
go version go1.21rc3 darwin/arm64
这个问题在最新版本的发布中是否重现?
没有(或差不多)。
我第一次遇到这个问题时,在一个模块的'go'行是1.21,所以今天最新的发布版本(1.20.6)并不适用。
如果我将'go'行更改为1.20,那么'go mod tidy'不再删除如此多的go.sum行,问题也不会重现。
你使用的操作系统和处理器架构是什么( go env
)?
go env
输出
$ go env
GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/gopher/Library/Caches/go-build'
GOENV='/Users/gopher/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT='loopvar'
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/gopher/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/gopher/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.21rc3'
GCCGO='gccgo'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/dev/null'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/_0/h0671fcn4rgb5pn9c745dx2h0000gn/T/go-build1549452710=/tmp/go-build -gno-record-gcc-switches -fno-common'
你做了什么?
我在一个中等大小的本地模块中运行了 go mod tidy
,该模块的go.mod文件中有'go 1.21'(主要是为了帮助测试这个语言版本及其语义,而不是因为我需要它;这个go.mod文件不是公开的)。
然后我运行了 go list -m -u all
。
编辑:触发问题的最精简的顶级go.mod文件非常简单。以下是一个完整的复现方法:
$ cd $(mktemp -d)
$ go mod init issue61605.test
$ echo 'package p; import _ "golang.org/x/build/maintner/reclog"' > p.go
$ go get golang.org/x/build@v0.0.0-20230726111318-84c18c56e0b0
$ go mod tidy
$ go list -m -u all
你期望看到什么?
通常的模块列表和可用更新,以及退出代码0。
你看到了什么?
$ go list -m -u all
go: updates to go.sum needed, disabled by -mod=readonly
$ echo $?
1
使用-mod=mod运行go list命令会重新添加go.sum行并使命令正常工作。
或者将go设置为1.20而不是1.21,然后重新运行go mod tidy也可以解决这个问题。
8条答案
按热度按时间rdrgkggo1#
CC @bcmills, @matloob。
oxcyiej72#
这是一个测试用例版本。我没有成功地将其缩小,但我认为我看到了一种使其停止中断的方法(不是正确的方法,但是一种方法)。
mklgxw1f3#
https://go.dev/cl/513778提到了这个问题:
cmd/go: make go list -m -u all not complain about missing checksums
jtoj6r0c4#
在CL 513778提交到Go 1.21发布分支后,我们可以将这个移动到Go 1.22里程碑。
vof42yt15#
https://go.dev/cl/514899提到了这个问题:
[release-branch.go1.21] cmd/go: make go list -m -u all not complain about missing checksums
s2j5cfk06#
已将创可贴提交至Go 1.21发布分支。现在有一个Go 1.22的bug。
u0njafvf7#
我认为一个合适的修复方法是朝着 #40775 的方向。应该以某种方式将要保留的校验和集与
modload.Requirements
结构关联起来,而不是将其作为全局变量进行跟踪。wvyml7n58#
@matloob, @samthanawalla:在
cmd/go
中需要进行代码清理。我预计一个合适的解决方案将相当复杂;代码中通过全局变量进行的通信量不幸地很大,这些通信用于更新go.sum
文件。