go: cmd/go: get: panic: internal error: can't find reason for requirement on golang.org/x/sync@...
What version of Go are you using (go version
)?
$ gotip version go version devel go1.20-e09bbae Sat Oct 29 04:48:07 2022 +0000 linux/amd64
Same result with 1.18.6, 1.19.
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/home/icio/.cache/go-build" GOENV="/home/icio/.config/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/home/icio/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/icio/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/home/icio/sdk/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/home/icio/sdk/go/pkg/tool/linux_amd64" GOVCS="" GOVERSION="devel go1.20-e09bbae Sat Oct 29 04:48:07 2022 +0000" GCCGO="gccgo" GOAMD64="v1" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/home/icio/go/src/github.com/icio/go-get-panic/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 -fdebug-prefix-map=/tmp/go-build2460736486=/tmp/go-build -gno-record-gcc-switches"
What did you do?
Run go get -u golang.org/x/tools
with go.mod:
module github.com/icio/go-get-panic
go 1.18
require (
golang.org/x/net v0.1.0
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f
golang.org/x/text v0.4.0
)
What did you expect to see?
go.mod updated with latest golang.org/x/tools version.
What did you see instead?
panic: internal error: can't find reason for requirement on golang.org/x/sync@v0.0.0-20220601150217-0de741cfad7f
goroutine 1 [running]:
cmd/go/internal/modget.(*resolver).updateBuildList.func1({{0xc0000281e0, 0x11}, {0xc000032690, 0x22}})
/home/icio/sdk/gotip/src/cmd/go/internal/modget/get.go:1760 +0xd4
cmd/go/internal/modget.(*resolver).updateBuildList(0xc00023c000, {0xb2d5d0, 0xc00002c0f8}, {0x0, 0x0, 0x0})
/home/icio/sdk/gotip/src/cmd/go/internal/modget/get.go:1765 +0x54c
cmd/go/internal/modget.(*resolver).resolveQueries(0xc00023c000, {0xb2d5d0, 0xc00002c0f8}, {0xc000014058, 0x1, 0xc0000a3d78?})
/home/icio/sdk/gotip/src/cmd/go/internal/modget/get.go:1243 +0x1a5
cmd/go/internal/modget.runGet({0xb2d5d0, 0xc00002c0f8}, 0xc0000285e8?, {0xc0000240f0, 0x1, 0x1})
/home/icio/sdk/gotip/src/cmd/go/internal/modget/get.go:314 +0x408
main.invoke(0xe371a0, {0xc0000240d0, 0x3, 0x3})
/home/icio/sdk/gotip/src/cmd/go/main.go:225 +0x3d9
main.main()
/home/icio/sdk/gotip/src/cmd/go/main.go:179 +0x7ce
To reproduce
$ git clone https://github.com/icio/go-get-panic
Cloning into 'go-get-panic'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7 (delta 1), reused 7 (delta 1), pack-reused 0
Receiving objects: 100% (7/7), done.
Resolving deltas: 100% (1/1), done.
$ cd go-get-panic
$ git checkout 2cbc2db2a48105fa2b71ec69d11b6496ba52c263
$ git rev-parse HEAD
2cbc2db2a48105fa2b71ec69d11b6496ba52c263
$ gotip version
go version devel go1.20-e09bbae Sat Oct 29 04:48:07 2022 +0000 linux/amd64
$ gotip get -u golang.org/x/tools
panic: internal error: can't find reason for requirement on golang.org/x/sync@v0.0.0-20220601150217-0de741cfad7f
goroutine 1 [running]:
cmd/go/internal/modget.(*resolver).updateBuildList.func1({{0xc0000281e0, 0x11}, {0xc000032690, 0x22}})
/home/icio/sdk/gotip/src/cmd/go/internal/modget/get.go:1760 +0xd4
cmd/go/internal/modget.(*resolver).updateBuildList(0xc00023c000, {0xb2d5d0, 0xc00002c0f8}, {0x0, 0x0, 0x0})
/home/icio/sdk/gotip/src/cmd/go/internal/modget/get.go:1765 +0x54c
cmd/go/internal/modget.(*resolver).resolveQueries(0xc00023c000, {0xb2d5d0, 0xc00002c0f8}, {0xc000014058, 0x1, 0xc0000a3d78?})
/home/icio/sdk/gotip/src/cmd/go/internal/modget/get.go:1243 +0x1a5
cmd/go/internal/modget.runGet({0xb2d5d0, 0xc00002c0f8}, 0xc0000285e8?, {0xc0000240f0, 0x1, 0x1})
/home/icio/sdk/gotip/src/cmd/go/internal/modget/get.go:314 +0x408
main.invoke(0xe371a0, {0xc0000240d0, 0x3, 0x3})
/home/icio/sdk/gotip/src/cmd/go/main.go:225 +0x3d9
main.main()
/home/icio/sdk/gotip/src/cmd/go/main.go:179 +0x7ce
This reproduces even if you remove the go.sum:
$ rm go.sum && gotip get -u golang.org/x/tools 2>&1 | head -1
panic: internal error: can't find reason for requirement on golang.org/x/sync@v0.0.0-20220601150217-0de741cfad7f
Uncommenting any of the requirements in go.mod and re-running go get -u golang.org/x/tools
will allow go get
to succeed. E.g.:
$ sed -i '/x\/net/d' go.mod
$ git diff
diff --git a/go.mod b/go.mod
index cc0392c..05b38b1 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,6 @@ module github.com/icio/go-get-panic
go 1.18
require (
- golang.org/x/net v0.1.0
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f
golang.org/x/text v0.4.0
)
$ go get -u golang.org/x/tools
go: downgraded golang.org/x/text v0.4.0 => v0.3.7
go: upgraded golang.org/x/tools v0.1.12 => v0.2.0
In the repository where I first encountered, this I was able to fix go get -u golang.org/x/tools
by removing the golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f
line. Next, re-running go mod tidy
reintroduces golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f
to go.mod. I’m not sure if this is related, but despite having a ./go.mod at the root of the project, we also have a ./cmd/ci-test-utility/go.mod which contains golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f
.
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Reactions: 19
- Comments: 41 (18 by maintainers)
Commits related to this issue
- Remove unecessary "go get" It makes the tests fail, possible because of this: https://github.com/golang/go/issues/47979 https://github.com/golang/go/issues/56494 — committed to kairos-io/provider-kairos by bear-shen 2 years ago
- Remove unecessary "go get" It makes the tests fail, possible because of this: https://github.com/golang/go/issues/47979 https://github.com/golang/go/issues/56494 Signed-off-by: Dimitris Karakasilis ... — committed to kairos-io/provider-kairos by bear-shen 2 years ago
- temporary workaround for v2.6.3 build issues Addressing: - https://github.com/golang/go/issues/56494#issuecomment-1425022660 - https://github.com/caddy-dns/godaddy/issues/4 - https://github.com/caddy... — committed to timelordx/caddy-dns-acmedns by timelordx a year ago
- bump caddy ver as workaround to golang/go/issues/56494 https://github.com/golang/go/issues/56494#issuecomment-1425022660 — committed to dualmoon/authp by dualmoon a year ago
- deps: Update golang.org/x/tools@v0.8.0 Reference: https://github.com/bflad/tfproviderlint/issues/255 Reference: https://github.com/golang/go/issues/56494 Manual upgrade due to prior Go panic: ```co... — committed to bflad/tfproviderlint by bflad a year ago
- deps: Update golang.org/x/tools@v0.8.0 (#270) Reference: https://github.com/bflad/tfproviderlint/issues/255 Reference: https://github.com/golang/go/issues/56494 Manual upgrade due to prior Go pan... — committed to bflad/tfproviderlint by bflad a year ago
- Update deps to make module usable again more info at https://github.com/golang/go/issues/56494 — committed to dimakow/netcup by dimakow a year ago
- cmd/go: add a test that reproduces the root cause of issue #56494 For #56494. Change-Id: I9bbded6d014ac73d81b973f2d7b4783e64380031 Reviewed-on: https://go-review.googlesource.com/c/go/+/447797 Run-T... — committed to golang/go by bcmills 2 years ago
- cmd/go: prune more dependencies in 'go get' Prior to this change, 'go get' pulled in every version of each module whose path is explicitly listed in the go.mod file. When graph pruning is enabled (th... — committed to golang/go by bcmills 2 years ago
We’re seeing this happen for a lot of users of Caddy trying to build with plugins added. In our case, it fails on
pprof
.We use our build tool
xcaddy
which is essentially a glorified shell script (written in Go) that just strings a bunch ofgo
commands together to make a build.See details below, basically makes a
main.go
, thengo mod init caddy
, thengo get
for each plugin in order, also including the main Caddy module to ensure plugins don’t inadvertently use a more recent version of Caddy (happens sometimes if the plugin’s main branch changes itsgo.mod
to a beta release of Caddy), thengo mod tidy
andgo build
.It doesn’t get to the
go build
in this case, because it panics duringgo get
.Details
Edit: After a bit more investigation, it looks like this is because Caddy upgraded its
quic-go
dependency in https://github.com/caddyserver/caddy/commit/798c4a3ba48b55e85867780ed399dc084c15b322, which in turn pulled inpprof
because ofquic-go
upgradingginkgo
to v2 in https://github.com/quic-go/quic-go/commit/870fbe7ab0b871d879767c83b9744d5d3ac54b97. That’s a test dependency, but it’s causing build issues 😭Edit2: I tried forking the Caddy plugin in question, and bumping its dependency on Caddy to v2.6.3 (latest as of this writing) and
go mod tidy
, so that thepprof
versions match, and that does fix the build. At least I have a workaround to tell users (i.e. ask plugin maintainers to bump their deps) but it’s unfortunate because it causes a horizon point for plugin compatibility.Thank you for all your great work, @bcmills 😃
I’ve mailed CL 471595 with a proposed fix. Folks who are affected by this bug: please try out a build with that change (either now or after it is merged) and let me know if any problems remain.
That change may also fix some of the “infinite hang” problems, since it fixes a source of errors in the build list. (
go get
iterates until the build list stabilizes, and I observed some infinite loops in testing caused by pruned dependencies being reintroduced or repeatedly re-eliminated.)@godcong, the best temporary workaround is probably to just manually update the
require
line forgolang.org/x/sync
to the version you want and then rungo mod tidy
to clean it up.(This bug does not affect
go mod tidy
, onlygo get
.)I see exactly the behavior that you describe. Thank you for distilling it down to a simple reproducer!
@anacrolix, if you’re getting an infinite hang try running
go get
with-v
and/or sendingSIGQUIT
, and please do file a separate issue.@bcmills The CL fixes this issue for me too. Specifically in https://github.com/anacrolix/torrent/issues/421#issuecomment-1496917847 I saw
And now I get
I think I still get the infinite hang I mentioned at https://github.com/golang/go/issues/56494#issuecomment-1496919121.
@mholt, you could patch the Go toolchain to pretend that it’s 1.20, but in this sort of case — especially since https://github.com/quic-go/quic-go/issues/2727 was filed back in 2020 — it’s kind of “you break it, you get to keep all the pieces”. Reaching into release-specific internals of the standard library is definitely not something the Go project supports. 🤷♂️
Thank you. It worked for me!
I also ran into this issue, and can confirm that it still happens with
go1.19.4
andgo1.20rc2
, using the following steps to reproduce:The error message is:
As a workaround, I added all the modules in the panic message to some unused internal package in my main module and in order to break the cycle and that fixed it: https://github.com/ipfs/kubo/blob/ee11ef6d2ca0df494e4d709f8354109452185a47/internal/i-hate-what-I-am-doing-here.go
Hi @clarkmcc I ended up upgrading the dependency that required the conflicting package. I recommend you start from there. Good luck.
@godcong Removing all mention of golang.org/x/sync from go.mod then running my original
go get
command fixed it all for me.