According to my understanding of these docs: https://go.dev/doc/go1.21#tools https://go.dev/doc/toolchain#version https://go.dev/ref/mod#go-mod-file-go
before go 1.21 it was not allowed to specify the patch version in the go.mod
.
so the code in fix cmd:
https://github.com/golang/go/blob/905b58b5377e8f542590a46a3c90146ab45a6c96/src/cmd/fix/main.go#L78-L79
does not handle string 1.21.0
.
Existing code also won't work with go 1.21rc1
What version of Go are you using (go version
)?
$ go version go version go1.21.0 linux/amd64
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/alex/.cache/go-build' GOENV='/home/alex/.config/go/env' GOEXE='' GOEXPERIMENT='' GOFLAGS='' GOHOSTARCH='amd64' GOHOSTOS='linux' GOINSECURE='' GOMODCACHE='/home/alex/go/pkg/mod' GONOPROXY='' GONOSUMDB='' GOOS='linux' GOPATH='/home/alex/go' GOPRIVATE='' GOPROXY='https://proxy.golang.org,direct' GOROOT='/usr/lib/go' GOSUMDB='sum.golang.org' GOTMPDIR='' GOTOOLCHAIN='auto' GOTOOLDIR='/usr/lib/go/pkg/tool/linux_amd64' GOVCS='' GOVERSION='go1.21.0' GCCGO='gccgo' GOAMD64='v1' AR='ar' CC='gcc' CXX='g++' CGO_ENABLED='1' GOMOD='/home/alex/code/reproducer/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-build2636372290=/tmp/go-build -gno-record-gcc-switches'
What did you do?
$ mkdir reproducer
$ cd reproducer/
$ go mod init reproducer
$ cat go.mod
module reproducer
go 1.21.0
$ cat << EOF > main.go
//go:build OMIT
// +build OMIT
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
EOF
$ go fix -tags OMIT .
invalid -go=go1.21.0
exit status 2
What did you expect to see?
Expected go fix to remove the deprecated build tag.
What did you see instead?
Error about invalid version.
Comment From: heschi
cc @bcmills @matloob @rsc @ianlancetaylor
Comment From: JJJasonKing
so should I update my go version to 1.21 or newer?
Comment From: peczenyj
ok so the workarond is to edit the go.mod
after go mod init
and remove the last .digit
right?
Comment From: alexbozhenko
@heschi what do we need to do to merge linked PR? Thanks!
Comment From: bcmills
The aforementioned PR is https://go.dev/cl/527342. Not sure why it didn't cross-reference here. 🤔
Comment From: gopherbot
Change https://go.dev/cl/527342 mentions this issue: cmd/fix: support go versions with patch release
Comment From: kolyshkin
@gopherbot Please backport to Go 1.22.
When I run go fix
using Go 1.22.5, it complains:
invalid -go=go1.21.0 exit status 2
While go1.23rc2 fix
works fine.
Comment From: gopherbot
Backport issue(s) opened: ~#68824 (for 1.21)~, #68825 (for 1.22), ~#68826 (for 1.23)~.
Remember to create the cherry-pick CL(s) as soon as the patch is submitted to master, according to https://go.dev/wiki/MinorReleases.
Comment From: kolyshkin
Remember to create the cherry-pick CL(s) as soon as the patch is submitted to master, according to https://go.dev/wiki/MinorReleases.
Apparently I can't create backport PRs myself (see https://github.com/golang/go/issues/68825#issuecomment-2278875793)
Comment From: gopherbot
Change https://go.dev/cl/603981 mentions this issue: [release-branch.go1.22] cmd/fix: support go versions with patch release