Novità in Go 1.24?
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.