在Go 1.21模块中,go mod tidy和'go list -m -u all'对于需要哪些go.sum行存在不一致,

xmq68pz9  于 6个月前  发布在  Go
关注(0)|答案(8)|浏览(61)

你使用的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也可以解决这个问题。

rdrgkggo

rdrgkggo1#

CC @bcmills, @matloob。

oxcyiej7

oxcyiej72#

这是一个测试用例版本。我没有成功地将其缩小,但我认为我看到了一种使其停止中断的方法(不是正确的方法,但是一种方法)。

mklgxw1f

mklgxw1f3#

https://go.dev/cl/513778提到了这个问题:cmd/go: make go list -m -u all not complain about missing checksums

jtoj6r0c

jtoj6r0c4#

在CL 513778提交到Go 1.21发布分支后,我们可以将这个移动到Go 1.22里程碑。

vof42yt1

vof42yt15#

https://go.dev/cl/514899提到了这个问题:[release-branch.go1.21] cmd/go: make go list -m -u all not complain about missing checksums

s2j5cfk0

s2j5cfk06#

已将创可贴提交至Go 1.21发布分支。现在有一个Go 1.22的bug。

u0njafvf

u0njafvf7#

我认为一个合适的修复方法是朝着 #40775 的方向。应该以某种方式将要保留的校验和集与 modload.Requirements 结构关联起来,而不是将其作为全局变量进行跟踪。

wvyml7n5

wvyml7n58#

@matloob, @samthanawalla:在cmd/go中需要进行代码清理。我预计一个合适的解决方案将相当复杂;代码中通过全局变量进行的通信量不幸地很大,这些通信用于更新go.sum文件。

相关问题