A Go csapat kiadta a Go 1.27-et, a népszerű nyílt forráskódú programozási nyelv legújabb nagy verziófrissítését, hat hónappal a Go 1.26 után. A kiadás a szokásoknak megfelelően tartja a Go 1 kompatibilitási ígéretét, így szinte minden meglévő Go program továbbra is lefordul és fut módosítás nélkül.
A Go 1.27 talán legnagyobb nyelvi újdonsága a generikus metódusok támogatása. A metódusdeklarációk mostantól saját típusparamétereket vezethetnek be, így a generikus funkcionalitás közvetlenül egy adott adattípus névterében jelenhet meg, ahelyett hogy a fejlesztőknek csomagszintű generikus függvényt kellene definiálniuk.
Általánosabbá vált a függvénytípus-következtetés is: mostantól minden olyan helyzetben működik, amikor egy generikus függvényt egy hozzá illeszkedő függvénytípusra rendelnek vagy alakítanak át.
A Go 1.27 egy figyelemre méltó runtime optimalizálást is hoz. A fordító mostantól méretre specializált allokációs rutinokat hív, ami akár 30%-kal csökkenti bizonyos, 80 byte alatti memóriafoglalások költségét. A pontos haszon a terheléstől függ, a Go csapat becslése szerint a valós, sok allokációt végző alkalmazásoknál átlagosan körülbelül 1%-os teljesítményjavulás érhető el.
Újabb runtime fejlesztés, hogy általánosan elérhetővé vált a goroutineleak profil, amely először kísérleti jelleggel a Go 1.26-ban jelent meg. A runtime/pprof csomagon és a /debug/pprof/goroutineleak HTTP végponton keresztül érhető el, és célja, hogy azonosítsa azokat a goroutine-okat, amelyek véglegesen elakadnak konkurens primitíveken, például csatornákon, mutexeken vagy feltételváltozókon.
Ezzel párhuzamosan a standard könyvtár az egyik legnagyobb változtatását kapja az encoding/json/v2 és az encoding/json/jsontext bevezetésével. Az előbbi a Go meglévő JSON csomagjának jelentős átdolgozása, míg a jsontext alacsonyabb szintű, szintaktikai JSON feldolgozást kínál, tokenekkel és értékekkel dolgozó enkódereken és dekódereken keresztül.
A JSON v2 szigorúbb alapértelmezéseket vezet be: elutasítja az érvénytelen UTF-8 karakterláncokat és a duplikált objektumtag-neveket. Fontos, hogy a meglévő alkalmazásokat nem kényszerítik át az új API-ra. A jól ismert encoding/json csomag továbbra is támogatott, de már a v2 megvalósítására épül, miközben megőrzi a korábbi marshal/unmarshal viselkedést.
Kriptográfia terén az új crypto/mldsa csomag megvalósítja az ML-DSA poszt-kvantum digitális aláírási sémát, amelyet a FIPS 204 szabványosít. Ezzel egy időben a crypto/x509 támogatja az ML-DSA nyilvános kulcsokat, privát kulcsokat és aláírásokat, a TLS 1.3 pedig már használhat ML-DSA aláírásokat az új MLDSA44, MLDSA65 és MLDSA87 aláírási sémákon keresztül.
A Go 1.27 a standard könyvtárban egy új uuid csomagot is bevezet, amely UUID-k generálására és feldolgozására szolgál, így egy gyakori feladathoz már nem feltétlenül kell külső függőséget használni.
Teljesítmény szempontból a kiadás egy kísérleti simd csomagot mutat be, amely hordozható, vektormérettől független SIMD műveleteket kínál. Ha a rendszer támogatja, hardveres vektorutasításokat használ, miközben hordozható vektortípusokat, például Int8s és Float32s típusokat biztosít. A funkció nem alapértelmezett, fordításkor külön kell bekapcsolni a GOEXPERIMENT=simd beállítással.
A Go parancssoros eszközei is sok fejlesztést kaptak. A go test mostantól alapértelmezetten futtatja a stdversion vet ellenőrzést, ami segít kiszűrni az olyan standard könyvtári API-k használatát, amelyek újabbak, mint a modul által megadott Go verzió.
A Go 1.27-et vagy újabbat használó projektekben a go mod tidy mostantól automatikusan összevonja a duplikált require szekciókat legfeljebb két blokkba (külön a közvetlen és külön a közvetett függőségeknek), miközben megőrzi a megjegyzéseket. Emellett több új, modernizálást segítő eszköz is bekerült a go fix parancsba.
A HTTP verem is több finomítást kapott: a Go HTTP/2 szervere most már figyelembe tudja venni az RFC 9218 szerinti kliens-prioritási jelzéseket, míg HTTP/1 esetén a válasz törzse lezáráskor automatikusan leürít egy korlátozott mennyiségű olvasatlan adatot, hogy javuljon a kapcsolat újrafelhasználása. A szerverek az új MaxHeaderValueCount mezővel korlátozhatják az elfogadott fejlécértékek számát is.
A Unicode támogatás a korábbi Unicode 15-ről Unicode 17-re ugrott, lefedve a Unicode 16 és 17 újdonságait is.
Változtak a platformkövetelmények a macOS-t használók számára. Ahogy korábban bejelentették, a Go 1.27 már macOS 13 Ventura vagy újabb rendszert igényel. A Linux 64 bites, big-endian PowerPC portján az eszközlánc az ELFv2 ABI-ra vált, és támogatást kap a cgo, a pozíciófüggetlen végrehajtható állományok és a külső linkelés számára.
További részletekért nézd meg a hivatalos bejelentést vagy a kiadási megjegyzéseket.

