GoSuda

Ce este nou în Go 1.24?

By Lemon Mint
views ...

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.

Overview of Go 1.24