---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: 'Prezentare generală a Go 1.24: Hărți Swiss Table, ML-KEM, os.Root și testing/synctest'
description: 'Prezentare tehnică a Go 1.24: hărți integrate Swiss Table, crypto/mlkem (FIPS 203), TLS Encrypted Client Hello, runtime.AddCleanup, os.Root și testing/synctest.'
language: ro
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

Go 1.24 se profilează ca o versiune semnificativă, introducând o serie de îmbunătățiri axate pe performanță, securitate și experiența dezvoltatorului. Aceste modificări urmăresc să facă Go și mai puternic și mai eficient pentru dezvoltarea aplicațiilor moderne.

## Performance Boost

O îmbunătățire generală a performanței, cu o reducere de 2-3% a suprasarcinii CPU în cadrul unui set de benchmark-uri reprezentative. Aceste îmbunătățiri includ o nouă implementare integrată a map-urilor, o alocare mai eficientă a memoriei pentru obiectele mici și o nouă implementare a mutex-ului intern al runtime-ului. Rezultatele pot varia în funcție de aplicație.

## Post-Quantum Crypto

Introducerea pachetului `crypto/mlkem`, care implementează ML-KEM-768 și ML-KEM-1024. ML-KEM este un mecanism de schimb de chei post-cuantic, cunoscut anterior sub numele de Kyber și specificat în FIPS 203. Această adăugare pregătește Go pentru viitorul securității criptografice.

## TLS Enhancement

Suport pentru Encrypted Client Hello (ECH) în TLS. Această funcționalitate poate fi activată prin completarea câmpului `Config.EncryptedClientHelloKeys`, sporind confidențialitatea și securitatea conexiunilor TLS.

## New Swiss Table Map

O implementare îmbunătățită a map-urilor, pentru o performanță mai bună. Această nouă implementare se bazează pe Swiss Tables și poate fi dezactivată cu ajutorul flag-ului de build `GOEXPERIMENT=noswissmap`.

## Sync Map Update

Performanță îmbunătățită pentru modificările map-urilor din `sync.Map`. Modificările asupra unor seturi disjuncte de chei au mult mai puține șanse să concureze pentru aceleași resurse pe map-urile mai mari, iar nu mai este necesară nicio perioadă de creștere treptată pentru a obține încărcări cu contenție scăzută din map. Dacă întâmpinați probleme, puteți reveni la vechea implementare utilizând `GOEXPERIMENT=nosynchashtriemap`.

## Enhanced JSON Marshaling

O nouă opțiune de tag `omitempty` pentru o omitere mai inteligentă a câmpurilor structurilor în timpul marshaling-ului JSON. La marshaling, un câmp al unei structuri 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.

## Runtime Cleanup

Introducerea funcției `AddCleanup` pentru a înlocui `SetFinalizer`, în scopul unei gestionări mai bune a resurselor. Spre deosebire de `SetFinalizer`, aceasta nu readuce obiectul asociat la viață pentru finalizare, iar mai multe operații de curățare pot fi atașate unui singur obiect. Codul nou ar trebui să prefere `AddCleanup` în locul `SetFinalizer`.

## Tool Directives in go.mod

Urmărirea îmbunătățită a dependențelor executabile, utilizând directive de tip tool în `go.mod`. Aceasta elimină necesitatea soluției anterioare, care presupunea adăugarea instrumentelor ca importuri anonime (blank imports) într-un fișier denumit convențional „tools.go”.

## Directory-Limited Access

Tipul nou `os.Root` pentru operații controlate asupra sistemului de fișiere. Tipul `os.Root` oferă posibilitatea de a efectua operații asupra sistemului de fișiere în cadrul unui anumit director, prevenind accesul în afara căii specificate.

## Testing Improvements

Pachetul nou `testing/synctest` pentru testarea codului concurent. Funcția `synctest.Run` pornește un grup de goroutine-uri într-un „bubble” izolat, iar funcția `synctest.Wait` așteaptă ca toate goroutine-urile din bubble-ul curent să se blocheze. Acest pachet este experimental și trebuie activat prin setarea `GOEXPERIMENT=synctest` la momentul build-ului.

## Build Cache

Executabilele `go run` sunt acum stocate în cache pentru o execuție mai rapidă. Acest lucru face execuțiile repetate mai rapide, în detrimentul unei dimensiuni mai mari a cache-ului.

## Cgo Performance

Adnotări noi `#cgo noescape` și `#cgo nocallback` pentru o performanță mai bună a Cgo. `#cgo noescape cFunctionName` indică compilatorului că memoria transmisă funcției C nu scapă. `#cgo nocallback cFunctionName` indică compilatorului că funcția C nu apelează înapoi nicio funcție Go.

## Weak Pointers

Suport pentru weak pointers, pentru a referi în siguranță memoria fără a împiedica recuperarea acesteia. Weak pointers reprezintă o primitivă de nivel scăzut, furnizată pentru a permite crearea unor structuri eficiente din punct de vedere al memoriei, precum map-uri slabe pentru asocierea valorilor, map-uri de canonicalizare și diverse tipuri de cache-uri.

## Benchmark Improvement

Metoda nouă `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ținute active, prevenind compilatorul să optimizeze complet corpul buclei.

Go 1.24 se profilează ca o versiune semnificativă, oferind îmbunătățiri substanțiale în diverse aspecte ale limbajului și ale ecosistemului său.

![Overview of Go 1.24](/assets/images/whats-new-in-go1.24/overview.webp)
