GoSuda

Novità in Go 1.24?

By Lemon Mint
views ...

Go 1.24 si preannuncia come una release significativa, introducendo una serie di miglioramenti incentrati su prestazioni, sicurezza ed esperienza dello sviluppatore. Queste modifiche mirano a rendere Go ancora più potente ed efficiente per la creazione di applicazioni moderne.

Incremento delle Prestazioni

Un miglioramento generale delle prestazioni con una riduzione del 2-3% del sovraccarico della CPU in una serie di benchmark rappresentativi. Questi miglioramenti includono una nuova implementazione della mappa integrata, un'allocazione di memoria più efficiente di piccoli oggetti e una nuova implementazione di mutex interna al runtime. I risultati possono variare a seconda dell'applicazione.

Crittografia Post-Quantistica

Introduzione del package crypto/mlkem, che implementa ML-KEM-768 e ML-KEM-1024. ML-KEM è un meccanismo di scambio di chiavi post-quantistico precedentemente noto come Kyber e specificato in FIPS 203. Questa aggiunta prepara Go per il futuro della sicurezza crittografica.

Miglioramento TLS

Supporto per Encrypted Client Hello (ECH) in TLS. Questa funzionalità può essere abilitata popolando il campo Config.EncryptedClientHelloKeys, migliorando la privacy e la sicurezza per le connessioni TLS.

Nuova Mappa Swiss Table

Un'implementazione della mappa migliorata per prestazioni migliori. Questa nuova implementazione si basa sulle Swiss Tables e può essere disabilitata con il flag di build GOEXPERIMENT=noswissmap.

Aggiornamento di Sync Map

Prestazioni migliorate per le modifiche alla mappa in sync.Map. È molto meno probabile che le modifiche di insiemi disgiunti di chiavi entrino in conflitto su mappe più grandi e non è più necessario alcun periodo di rodaggio per ottenere carichi a bassa contesa dalla mappa. Se si riscontrano problemi, è possibile tornare alla vecchia implementazione utilizzando GOEXPERIMENT=nosynchashtriemap.

Marshaling JSON Migliorato

Una nuova opzione tag omitempty per l'omissione più intelligente dei campi struct durante il marshaling JSON. Durante il marshaling, un campo struct con l'opzione omitempty verrà omesso se il suo valore è zero. Se il tipo di campo ha un metodo IsZero() bool, questo verrà utilizzato per determinare se il valore è zero.

Pulizia del Runtime

Introduzione della funzione AddCleanup per sostituire SetFinalizer per una migliore gestione delle risorse. A differenza di SetFinalizer, non ripristina l'oggetto a cui è allegato per la finalizzazione e più operazioni di pulizia possono essere allegate a un singolo oggetto. Il nuovo codice dovrebbe preferire AddCleanup a SetFinalizer.

Direttive degli Strumenti in go.mod

Tracciamento migliorato delle dipendenze eseguibili utilizzando direttive degli strumenti in go.mod. Ciò elimina la necessità della precedente soluzione alternativa di aggiungere strumenti come importazioni vuote a un file convenzionalmente denominato "tools.go".

Accesso Limitato alla Directory

Nuovo tipo os.Root per operazioni controllate sul filesystem. Il tipo os.Root offre la possibilità di eseguire operazioni sul filesystem all'interno di una directory specifica, impedendo l'accesso al di fuori del percorso specificato.

Miglioramenti nei Test

Nuovo package testing/synctest per il test di codice concorrente. La funzione synctest.Run avvia un gruppo di goroutine in una "bolla" isolata e la funzione synctest.Wait attende che tutte le goroutine nella bolla corrente si blocchino. Questo package è sperimentale e deve essere abilitato impostando GOEXPERIMENT=synctest al momento della compilazione.

Cache di Build

Gli eseguibili go run sono ora memorizzati nella cache per un'esecuzione più rapida. Ciò rende le esecuzioni ripetute più veloci a scapito di un aumento delle dimensioni della cache.

Prestazioni Cgo

Nuove annotazioni #cgo noescape e #cgo nocallback per migliori prestazioni Cgo. #cgo noescape cFunctionName indica al compilatore che la memoria passata alla funzione C non esce. #cgo nocallback cFunctionName indica al compilatore che la funzione C non richiama alcuna funzione Go.

Puntatori Deboli

Supporto per puntatori deboli per fare riferimento in modo sicuro alla memoria senza impedire il recupero. I puntatori deboli sono una primitiva di basso livello fornita per consentire la creazione di strutture efficienti in termini di memoria, come mappe deboli per l'associazione di valori, mappe di canonicalizzazione e vari tipi di cache.

Miglioramento dei Benchmark

Nuovo metodo testing.B.Loop per benchmark più veloci e meno soggetti a errori. La funzione di benchmark verrà eseguita esattamente una volta per -count, in modo che le fasi di setup e pulizia costose vengano eseguite solo una volta. I parametri e i risultati della chiamata di funzione vengono mantenuti attivi, impedendo al compilatore di ottimizzare completamente il corpo del ciclo.

Go 1.24 si preannuncia come una release significativa, offrendo notevoli miglioramenti in vari aspetti del linguaggio e del suo ecosistema.

Overview of Go 1.24