Go 1.22 è già stato rilasciato, scopri le sue nuove funzionalità e miglioramenti

Goland

Go è un linguaggio di programmazione concorrente e compilato con tipizzazione statica ispirata alla sintassi C.

La nuova versione di Go, la 1.22, arriva sei mesi dopo la versione 1.21, con una serie di modifiche significative al set di strumenti, al runtime, ai miglioramenti dell'ottimizzazione, alle ottimizzazioni del compilatore e alle librerie.

Per chi non ha familiarità con Go, è bene precisare che si tratta di un linguaggio di programmazione sviluppato da Google con la partecipazione della comunità, una soluzione ibrida che combina le elevate prestazioni dei linguaggi compilati con i vantaggi tipici dei linguaggi di scripting, come la facilità di scrittura del codice, la velocità di sviluppo e la protezione dagli errori.

Principali novità di Go 1.22

In questa nuova versione, introdotta da Go 1.22, spiccano due modifiche ai cicli "for" . In precedenza, le variabili dichiarate da un ciclo "for" venivano create una sola volta e aggiornate a ogni iterazione. In Go 1.22, ogni iterazione del ciclo crea nuove variabili per prevenire errori di condivisione accidentali. Inoltre , è stato aggiunto il supporto sperimentale (GOEXPERIMENT=rangefunc) per le funzioni di intervallo nei cicli "for", consentendo di specificare una funzione come iteratore. È stato anche risolto un problema di lunga data con i cicli "for" che causava la condivisione delle variabili di ciclo tra le iterazioni nelle chiamate alle coroutine . Infine, i cicli "for" ora possono iterare su numeri interi. Ad esempio:

pacchetto main import "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 decolla!") }

Un'altra novità degna di nota in questa nuova versione è l'introduzione della possibilità di utilizzare una directory " vendor " che contiene le dipendenze dell'area di lavoro. I comandi possono ora utilizzare questa directory, che viene creata con ` go work vendor` e utilizzata nei comandi di compilazione quando ` -mod` è impostato su " vendor ", che è l'impostazione predefinita quando una directory " vendor " esiste nell'area di lavoro.

È importante notare che la funzionalità ` go get` non è più supportata al di fuori di un modulo nella modalità GOPATH legacy. Tuttavia, altri comandi di compilazione come `go build` e `go test` continueranno a funzionare indefinitamente per i programmi GOPATH legacy. Inoltre, il comando `go mod init` non tenterà più di importare i requisiti del modulo dai file di configurazione di altri strumenti di terze parti (come Gopkg.lock).

Go 1.22 introduce un nuovo pacchetto, `io/unsafe` , che fornisce funzionalità per lavorare con puntatori e memoria non sicura . Questo pacchetto offre metodi per convertire i puntatori da tipi sicuri a tipi non sicuri, nonché per eseguire operazioni di copia di memoria senza controllare i limiti.

Il lavoro è proseguito per integrare le ottimizzazioni del compilatore basate sui risultati della profilazione del codice PGO. Il compilatore ora utilizza strumenti di devirtualizzazione per sostituire le chiamate indirette da vari metodi con l'esecuzione di blocchi inline espansi. Quando PGO è stato abilitato, questa modifica ha migliorato le prestazioni della maggior parte dei programmi tra il 2% e il 14%.

Nella versione di Go per Windows, i programmi che si collegano o caricano librerie Go compilate con -buildmode=c-archive o -buildmode=c-shared possono ora utilizzare l'API di registrazione eventi di Windows (ETW) tramite i nuovi pacchetti runtime/trace e tracehook , che implementano il protocollo di raccolta delle tracce degli eventi di Go come provider ETW.

Tra le altre modifiche che si distinguono:

  • Il comando vai al test -cover ora stampa i riepiloghi della copertura per i pacchetti coperti che non dispongono di file di test propri.
  • sistema operativo/eseguibile, è stata aggiunta la possibilità di definire attributi di contesto, consentendo di impostare valori come la directory di lavoro, le variabili di ambiente e il descrittore di file di input/output per i comandi eseguiti.
  • Gestione ottimizzata della memoria in fase di runtime, con conseguente aumento delle prestazioni dell'1-3% e una riduzione dell'1% nel consumo di memoria per la maggior parte delle applicazioni.
  • El Paquete rete/http, la funzione è stata aggiunta ChiudiConnessioni inattive al client HTTP, che chiude tutte le connessioni inattive utilizzate di recente dal client
  • Al compilatore è stata aggiunta un'implementazione sperimentale migliorata (GOEXPERIMENT=newinliner) del meccanismo di inserimento delle chiamate, che utilizza l'euristica per separare le operazioni importanti da quelle non importanti.
  • Il pacchetto è stato aggiunto » matematica/rand/v2 » alla libreria standard, che offre un'API più coerente e utilizza algoritmi più veloci per generare numeri pseudocasuali.
  • El Paquete net/http.ServeMux Aggiunta la possibilità di specificare metodi e maschere nei modelli.

Infine, se siete interessati ad approfondire l'argomento, potete trovare maggiori dettagli al seguente link.


Aggiungi come fonte preferita in Google