HEAPS

Go 1.25: GOMAXPROCS w kontenerach, synctest i co warto włączyć

Go 1.25 lepiej rozumie limity CPU w Kubernetesie, stabilizuje testing/synctest i eksperymentuje z json/v2 oraz nowym GC.

Go 1.25 nie zmienia składni. Zmienia zachowanie w produkcji.

Wydanie z sierpnia 2025 idzie utartą ścieżką Go: kompatybilność zostaje, a większość zysków siedzi w runtime, toolchainie i bibliotece standardowej. Jeśli wołasz Go w Kubernetesie albo piszesz testy współbieżne, te zmiany poczujesz szybciej niż na changelogu.

Container aware GOMAXPROCS

Wcześniej Go domyślnie brało liczbę logicznych CPU hosta. W podałe z limitem 2 CPU na 32 rdzeniowym nodzie potrafiło to rozjechać scheduling i zużycie.

W 1.25 runtime patrzy na limity cgroup i dostosowuje GOMAXPROCS. Mniej niespodzianek przy horizontal pod autoscaling, mniej ręcznego ustawiania env w każdym Deploymentcie. Nadal możesz nadpisać wartość, gdy mierzysz coś nietypowego.

testing/synctest bez eksperymentu

Paczka do testowania współbieżności wyszła z trybu eksperymentalnego. Jeśli pisałeś flaky testy z time.Sleep „na wszelki wypadek”, synctest daje kontrolowane środowisko bez czekania na prawdziwy zegar.

func TestWorker(t *testing.T) {
    synctest.Test(t, func(t *testing.T) {
        // logika z goroutines i kanałami
        // bez losowych sleepów „żeby zdążyło”
    })
}

Dla serwisów z workerami, fan-outem i timeoutami to oszczędza godziny debugowania CI.

Eksperymenty: json/v2 i Green Tea GC

Go 1.25 trzyma je za GOEXPERIMENT, więc nie włączaj ich ślepo na produkcji pierwszego dnia.

GOEXPERIMENT=jsonv2 daje nowe API wokół JSON z lepszą wydajnością i bardziej przewidywalnym marshalingiem. Warto odpalić na stagingu przy serwisach, które żyją z dużych payloadów.

GOEXPERIMENT=greenteagc celuje w GC przy dużej liczbie małych obiektów. Jeśli macie serwis cache’ujący dużo małych struktur, zmierzcie p50/p99 pauz przed i po.

Tooling i binarki

DWARF 5 zmniejsza debug info i przyspiesza linkowanie dużych binarek. go build -asan domyślnie szuka leaków po stronie C, co przy cgo bywa niewygodne, ale łapie realne problemy wcześniej. Przy czystym Go zwykle nie zauważysz różnicy.

Czy aktualizować z 1.24

Tak, jeśli:

  • deployujesz do kontenerów z CPU limits,
  • macie flaky testy współbieżne,
  • chcecie krótszy feedback z toolchaina na dużych monorepo.

Poczekaj z eksperymentami JSON i GC, dopóki nie macie benchmarków na własnym ruchu. Bump z 1.24 do 1.25 bywa spokojny, bo język prawie się nie ruszył, a runtime lepiej rozumie kontenery.