Novità GO 1.25

Novità GO 1.25

Novità di Go 1.25

La nuova release di Go 1.25 porta con sé una serie di cambiamenti significativi, in particolare per quanto riguarda la semplificazione del linguaggio e l’eliminazione del concetto di core types. In questo articolo analizziamo in dettaglio le principali novità introdotte, illustrando esempi pratici per sviluppatori, devops e ingegneri informatici.

Il Contesto: Generics e Core Types

A partire dalla release 1.18, Go ha introdotto i generics, consentendo l’utilizzo di type parameters e type constraints. Queste innovazioni hanno permesso di scrivere funzioni e strutture dati più flessibili. Per gestire le operazioni sui tipi generici, è stato introdotto il concetto di core type, ossia una rappresentazione astratta del tipo sottostante per operandi generici. Ad esempio, il tipo constraint:

type Constraint interface {
    ~[]byte | ~string
    Hash() uint64
}

definisce un insieme di tipi che condividono una rappresentazione di base ([]byte o string) e che implementano il metodo Hash(). Tuttavia, questo approccio, pur essendo funzionale, ha reso la comprensione delle regole di alcune operazioni (come l’indicizzazione, l’uso di len e cap, o le slice expressions) più complessa del necessario.

Le Modifiche di Go 1.25 – Novità GO 1.25

La grande novità di Go 1.25 consiste nell’eliminazione del concetto di core types dalla specifica del linguaggio. Questo cambiamento, introdotto tramite il proposal issue #70128 cite1, comporta diversi benefici:

  • Semplificazione della Specifica: La rimozione del termine “core type” ha ridotto la complessità della documentazione. Le descrizioni delle operazioni sui tipi ora rispecchiano più fedelmente il comportamento atteso, senza dover fare riferimento a concetti astratti non sempre necessari.
  • Migliore Comprensione per il Codice Non Generico: Gli sviluppatori che lavorano su codice tradizionale potranno comprendere le regole del linguaggio senza doversi preoccupare di concetti introdotti esclusivamente per supportare i generics.
  • Messaggi di Errore Più Specifici: Il compilatore è stato aggiornato per non citare più il “core type” nei messaggi di errore. In caso di errori legati alle operazioni su tipi generici, il messaggio indicherà esplicitamente quale tipo nella type set causa il problema, facilitando il debugging.

Per esempio, consideriamo il funzionamento della built-in function close. Fino a Go 1.18 la documentazione dichiarava:

“For an argument ch with core type that is a channel, the built-in function close records that no more values will be sent on the channel.”

Con Go 1.25, questo viene semplificato in:

“For a channel ch, the built-in function close(ch) records that no more values will be sent on the channel.”

La parte relativa ai generics viene trattata separatamente, specificando che se l’argomento è un type parameter, tutti i tipi nella type set devono essere canali compatibili (ossia, con lo stesso tipo di elemento e non di sola ricezione).

Esempi Pratici

Esempio 1: Funzione Generica di Indicizzazione

Consideriamo una funzione generica che restituisce l’elemento all’indice specificato. Con i precedenti concetti di core types, si utilizzava un constraint che imponeva la validità dell’operazione di indicizzazione:

func at[Bytestring interface{ ~[]byte | ~string }](s Bytestring, i int) byte {
    return s[i]
}

In Go 1.25, il comportamento resta identico, ma la documentazione e i messaggi di errore non faranno più riferimento ai “core types”, semplificando la comprensione.

Esempio 2: Chiusura di un Canale

La funzione close è un’altra area in cui le modifiche sono evidenti. Nel nuovo approccio, la documentazione è chiara e immediata per i canali tradizionali, mentre per i generics viene aggiunta una nota esplicativa:

// Esempio di chiusura di un canale
ch := make(chan int)
close(ch)

Se ch fosse un parametro generico, il compilatore verificherebbe che tutti i tipi possibili nella type set siano canali, senza fare riferimento al concetto di core type.

Deprecazioni e Futuri Miglioramenti – Novità GO 1.25

Con la rimozione dei core types, le parti della specifica che li facevano riferimento sono deprecate. Questo non cambia il comportamento attuale dei programmi Go, ma apre la strada a futuri miglioramenti, come operazioni di slice più potenti e un’inferenza dei tipi ancora più flessibile. La deprecazione riguarda esclusivamente la documentazione e il linguaggio specificativo, non l’uso quotidiano dei generics.

Conclusioni – Novità GO 1.25

Go 1.25 si conferma un aggiornamento orientato a semplificare la curva di apprendimento del linguaggio e a rendere i messaggi del compilatore più utili e chiari, specialmente in scenari che coinvolgono i generics. Gli sviluppatori potranno continuare a scrivere codice efficiente e robusto senza dover gestire concetti astratti e potenzialmente fuorvianti. Questo aggiornamento, pur non modificando il comportamento delle applicazioni esistenti, rappresenta un passo importante verso una maggiore chiarezza e flessibilità del linguaggio.

Per restare sempre aggiornati e competere al meglio nel mercato IT, ricordate che Innovaformazione, scuola IT sempre al passo con i trend di mercato, offre tra i suoi corsi anche un Corso GO rivolto alle aziende. Un’occasione imperdibile per approfondire le potenzialità di questo linguaggio in continua evoluzione!

(fonte)

Contatti: info@innovaformazione.net – tel. 3471012275 (Dario Carrassi)

Ti potrebbe interessare

Articoli correlati