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