Go版本
go版本 go1.22.3 linux/amd64
在你的模块/工作区中的go env
输出:
GO111MODULE=''
GOARCH='amd64'
GOBIN='/home/caleb/bin'
GOCACHE='/home/caleb/.cache/go-build'
GOENV='/home/caleb/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/caleb/p/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/caleb/p/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/caleb/apps/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/home/caleb/apps/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.22.3'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/home/caleb/3p/pomerium/go.mod'
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 -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build4079397003=/tmp/go-build -gno-record-gcc-switches'
你做了什么?
这是从#56471衍生出来的。那个提案建议让go mod tidy
自动加入多个require
部分。然而,有一个基本的bug,即go mod tidy
本身往往要对这些多个部分负责。这个问题是关于这个bug的。
在工作中的一个大型私有Go模块中,我们有三个require
部分。这些都是由go mod tidy
创建的。第一个部分有直接依赖关系,而第二个和第三个require
部分有间接依赖关系。
我们可以很容易地重现错误:如果我们删除第二个require
部分(这两个间接部分中的第一个),然后运行go mod tidy
,它会重新创建单独的间接require
部分,而不是将缺失的条目添加到现有的require
部分中。
我不能分享工作代码,但是通过查看与#56471相关的问题,我在一个公共仓库中找到了同样发生问题的案例。以下是如何使用该仓库重现问题的示例:
$ git clone https://github.com/pomerium/pomerium
...
$ cd pomerium
$ git checkout -q f54b1a7d098fac76c7ddbccdb9351483466b7b6a
# Observe that the go.mod contains three sections.
# Delete the second section.
$ sed -i '78,123d' go.mod
# Now go.mod contains two sections, direct and indirect.
$ go mod tidy
...
# Observe that go.mod contains three sections again.
# 'go mod tidy' added a section.
你看了什么发生?
go mod tidy
添加了一个新的额外间接 require
部分。
你期望看到什么?
我期望 go mod tidy
能够向现有的 require
部分添加条目。
更一般地说:如果我只编辑go.mod自动进行编辑,从未手动编辑过,我期望Go工具能够维护最多两个 require
部分(一个直接和一个间接)。
请注意,解决这个问题是有可能的。如果你手动将这两个 require
部分连接起来, go mod tidy
将把它们保持在一起作为一个大的部分(它不会把它们分开)。但这种手动工作不应该被要求。此外,这只是暂时的:将来对代码的添加可能会导致 go mod tidy
为 go.mod
添加新部分。
3条答案
按热度按时间bz4sfanl1#
/cc @matloob@samthanawalla per owners
e4eetjau2#
相似问题
mod tidy -go=1.17
should move indirect dependencies to the second require part #47733(如果这个有帮助或无帮助,请给表情投票;欢迎在 this discussion 中提供更详细的反馈。)
1u4esq0p3#
我可以提供另一个例子:https://github.com/siemens/turtlefinder/blob/f21b66938827bb8d9ec1a720b34c870465e5620e/go.mod
如果我理解正确的话,这个案例中的第三个需求部分甚至包括直接和间接的混合。