Ce este nou în Go 1.24?
Go 1.24 se conturează a fi o lansare semnificativă, introducând o serie de îmbunătățiri concentrate pe performanță, securitate și experiența dezvoltatorului. Aceste modificări vizează să facă Go și mai puternic și mai eficient pentru construirea aplicațiilor moderne.
Creștere a Performanței
O îmbunătățire generală a performanței cu o reducere de 2-3% a suprasarcinii CPU într-o suită de benchmark-uri reprezentative. Aceste îmbunătățiri includ o nouă implementare încorporată a map-ului, o alocare mai eficientă a memoriei pentru obiectele mici și o nouă implementare internă a mutex-ului în runtime. Rezultatele pot varia în funcție de aplicație.
Cripto Post-Cuantic
Introducerea pachetului crypto/mlkem
, implementând ML-KEM-768 și ML-KEM-1024. ML-KEM este un mecanism post-cuantic de schimb de chei cunoscut anterior sub numele de Kyber și specificat în FIPS 203. Această adăugare pregătește Go pentru viitorul securității criptografice.
Îmbunătățirea TLS
Suport pentru Encrypted Client Hello (ECH) în TLS. Această funcționalitate poate fi activată prin popularea câmpului Config.EncryptedClientHelloKeys
, sporind confidențialitatea și securitatea conexiunilor TLS.
Noua Mapă Swiss Table
O implementare îmbunătățită a map-ului pentru o performanță mai bună. Această nouă implementare se bazează pe Swiss Tables și poate fi dezactivată cu flag-ul de compilare GOEXPERIMENT=noswissmap
.
Actualizare Sync Map
Performanță îmbunătățită pentru modificările de map în sync.Map
. Modificările seturilor disjuncte de chei sunt mult mai puțin susceptibile de a intra în conflict pe map-uri mai mari, și nu mai este necesar un timp de ramp-up pentru a atinge încărcări cu contingență redusă din map. Dacă întâmpinați probleme, puteți reveni la implementarea veche utilizând GOEXPERIMENT=nosynchashtriemap
.
Marshaling JSON Îmbunătățit
O nouă opțiune de tag omitempty
pentru o omisiune mai inteligentă a câmpurilor structurii în timpul marshaling-ului JSON. La marshaling, un câmp de structură cu opțiunea omitempty
va fi omis dacă valoarea sa este zero. Dacă tipul câmpului are o metodă IsZero() bool
, aceasta va fi utilizată pentru a determina dacă valoarea este zero.
Curățare Runtime
Introducerea funcției AddCleanup
pentru a înlocui SetFinalizer
pentru o gestionare mai bună a resurselor. Spre deosebire de SetFinalizer
, aceasta nu readuce la viață obiectul la care este atașată pentru finalizare, și multiple curățări pot fi atașate unui singur obiect. Codul nou ar trebui să prefere AddCleanup
în locul SetFinalizer
.
Directive pentru Instrumente în go.mod
Urmărire îmbunătățită a dependențelor executabile utilizând directive pentru instrumente în go.mod
. Aceasta elimină necesitatea soluției anterioare de adăugare a instrumentelor ca importuri goale într-un fișier numit convențional „tools.go”.
Acces Limitat la Director
Noul tip os.Root
pentru operații controlate asupra sistemului de fișiere. Tipul os.Root
oferă capacitatea de a efectua operații asupra sistemului de fișiere într-un director specific, prevenind accesul în afara căii specificate.
Îmbunătățiri ale Testării
Noul pachet testing/synctest
pentru testarea codului concurent. Funcția synctest.Run
pornește un grup de goroutines într-un „bule” izolat, iar funcția synctest.Wait
așteaptă ca toate goroutines din bulele curente să se blocheze. Acest pachet este experimental și trebuie activat prin setarea GOEXPERIMENT=synctest
la momentul compilării.
Cache de Compilare
Executabilele go run
sunt acum puse în cache pentru o execuție mai rapidă. Acest lucru face execuțiile repetate mai rapide, în detrimentul măririi cache-ului.
Performanță Cgo
Noi adnotări #cgo noescape
și #cgo nocallback
pentru o performanță Cgo mai bună. #cgo noescape cFunctionName
îi spune compilatorului că memoria transmisă funcției C nu scapă. #cgo nocallback cFunctionName
îi spune compilatorului că funcția C nu apelează înapoi nicio funcție Go.
Pointeri Slăbiți
Suport pentru pointeri slăbiți pentru a referi în siguranță memoria fără a preveni recuperarea. Pointerii slăbiți sunt o primitivă de nivel scăzut oferită pentru a permite crearea de structuri eficiente din punct de vedere al memoriei, cum ar fi map-uri slabe pentru asocierea valorilor, map-uri de canonizare și diverse tipuri de cache-uri.
Îmbunătățirea Benchmark-ului
Noua metodă testing.B.Loop
pentru benchmark-uri mai rapide și mai puțin predispuse la erori. Funcția de benchmark se va executa exact o dată per -count
, astfel încât pașii costisitori de configurare și curățare se execută o singură dată. Parametrii și rezultatele apelurilor de funcții sunt menținuți în viață, împiedicând compilatorul să optimizeze complet corpul buclei.
Go 1.24 se conturează a fi o lansare semnificativă, oferind îmbunătățiri substanțiale în diverse aspecte ale limbajului și ecosistemului său.