Go版本
go版本 go1.21.5 darwin/arm64
在你的模块/工作区中go env
的输出:
GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/trajan0x/Library/Caches/go-build'
GOENV='/Users/trajan0x/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/trajan0x/go/pkg/mod'
GONOPROXY='github.com/synapsecns/*'
GONOSUMDB='github.com/synapsecns/*'
GOOS='darwin'
GOPATH='/Users/trajan0x/go'
GOPRIVATE='github.com/synapsecns/*'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/opt/homebrew/Cellar/go/1.21.5/libexec'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/opt/homebrew/Cellar/go/1.21.5/libexec/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.21.5'
GCCGO='gccgo'
AR='ar'
CC='cc'
CXX='c++'
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/12/8xtw48x951g0vv4z_ctcr2hr0000gn/T/go-build1424252971=/tmp/go-build -gno-record-gcc-switches -fno-common'
你做了什么?
git clone https://github.com/synapsecns/sanguine
go work sync
git checkout 995354fca4e89c0931ea5f6f0a77f170aac2f13e
(这种情况在几个提交之间发生,我在Add native ETH support to relayer synapsecns/sanguine#1840上找到了它,只是为了可重复性而在主分支上提供了一个单独的提交)
(注意:这个recipe对于这种bug不起作用,但我创建了一个仓库here的REPL,并运行了命令,只是为了方便调试。
你看到了什么发生?
go: cloud.google.com/go@v0.110.7 requires
github.com/google/s2a-go@v0.1.4
panic: internal error: found a version conflict, but no constraint it violates
goroutine 1 [running]:
cmd/go/internal/modload.editRequirements({0x1010edbd0, 0x1014830a0}, 0x14013bbaaa0, {0x0, 0x0, 0x1400bb7e828?}, {0x14007bac000, 0x108, 0x1400bb7e800?})
/opt/homebrew/Cellar/go/1.21.5/libexec/src/cmd/go/internal/modload/edit.go:336 +0x2bc0
cmd/go/internal/modload.EditBuildList({0x1010edbd0, 0x1014830a0}, {0x0, 0x0, 0x0}, {0x14007bac000, 0x108, 0x200})
/opt/homebrew/Cellar/go/1.21.5/libexec/src/cmd/go/internal/modload/buildlist.go:640 +0x64
cmd/go/internal/workcmd.runSync({0x1010edbd0, 0x1014830a0}, 0x140000265b8?, {0x14?, 0x1010248c0?, 0x100adbc6c?})
/opt/homebrew/Cellar/go/1.21.5/libexec/src/cmd/go/internal/workcmd/sync.go:117 +0x4d0
main.invoke(0x10143fd80, {0x140000201a0, 0x1, 0x1})
/opt/homebrew/Cellar/go/1.21.5/libexec/src/cmd/go/main.go:268 +0x4f0
main.main()
/opt/homebrew/Cellar/go/1.21.5/libexec/src/cmd/go/main.go:186 +0x754
你期望看到什么?
成功,另一个错误,但不是恐慌。
这个没有被优雅地处理的事实告诉我,这可能是意外的行为。但我有点不确定,因为在edit.go的情况下
9条答案
按热度按时间1wnzp6jl1#
一些注意事项:
github.com/google/s2a-go@v0.1.4
位于go 1.16
,因此未被修剪。它直接被工作区中的几个模块所需要。当一个被修剪的模块对另一个根模块有需求,而那个根模块未被修剪时,我们需要从模块图的修剪侧过渡到未被修剪的侧。我怀疑在
dqTracker.path
中,当需要这样做时,它并没有发生。yhqotfr82#
https://go.dev/cl/571800提到了这个问题:
cmd/go/internal/modload: follow dependencies of unpruned roots in dqTracker.path
rekjcdws3#
翻译结果为:错误发生在$x^{
contrib/terraform-provider-helmproxy
}$模块中,冲突产生是因为所选工作区的$x^{github.com/google/pprof
}$版本比模块选择的版本要低——但$x^{github.com/google/pprof
}$与此模块无关。$x^{
}$
o7jaxewo4#
依赖于不匹配的
pprof
通过一个旧的k8s.io/client-go@v0.25.5
传递:但是
k8s.io/api v0.25.5
在go 1.19
上,所以它通常启用了模块图修剪功能——它一定通过其他依赖项被拉入。mxg2im7a5#
好的,这是实际的错误路径:
github.com/hashicorp/terraform-provider-google/v4 v4.2.0
被明确要求且未被修剪(在go 1.16
处)。从那里,我们到达了未被修剪的错误路径
pprof
:因此,似乎在工作区模式下,我们无法加载
github.com/hashicorp/terraform-provider-google/v4@v4.2.0
的传递依赖关系。bfnvny8b6#
contrib/tfcore/go.mod
正在使用通配符replace
指令将google.golang.org/api
替换为该模块特定版本的源代码:qyswt5oh7#
因此,版本中的偏差似乎来自于在
go work sync
中不一致地应用了replace
指令。replace
指令:https://cs.opensource.google/go/go/+/master:src/cmd/go/internal/workcmd/sync.go;l=57-60;drc=ce8146ed3361f584ba79427ac6c6d6fe9c297beareplace
指令:https://cs.opensource.google/go/go/+/master:src/cmd/go/internal/workcmd/sync.go;l=105-117;drc=ce8146ed3361f584ba79427ac6c6d6fe9c297bea此外,从
EditBuildList
返回的错误导致go work sync
静默地执行continue
而不是报错:https://cs.opensource.google/go/go/+/master:src/cmd/go/internal/workcmd/sync.go;l=117-120;drc=ce8146ed3361f584ba79427ac6c6d6fe9c297beal5tcr1uw8#
总结:
editRequirements
在诊断无法解决的冲突时应用模块图剪枝时存在一个错误,应由 https://go.dev/cl/571800 修复。go work sync
在应用replace
指令时存在另一个错误,需要单独修复。这两个错误的组合产生了观察到的症状。
gopyfrb39#
我们未能在1.23版本中及时完成此项工作,并且第一个问题评论中的原始错误不再显示,因此我们将将其推送到1.24版本。