Punti di forza del linguaggio Go

Stabilità, integrazione e codice ottimizzato

Go è un linguaggio di programmazione versatile e potente. Non a caso nel 2009 è stato premiato come “Linguaggio di Programmazione dell’anno” dalla TIOBE, una società informatica che cura un indice di popolarità dei linguaggi di programmazione. Ad Ottobre, Go registra ancora un incremento di popolarità e non si esclude che possa essere insignito del premio anche per il 2016.
Come racconto nell’introduzione della mia guida “Programmare in Linguaggio Go”, le origini di questo linguaggio risalgono al 2007 quando Robert Griesemer, Rob Pike e Ken Thompson, tre ingegneri informatici della Google, decisero che era il momento di costruire un linguaggio che rispondesse alle loro esigenze di programmazione, un linguaggio semplice e potente, un linguaggio che potesse compilare in breve tempo programmi più efficienti, un linguaggio che non creasse confusione e ripetizione nel codice, facile da comprendere e da scrivere.
Le esigenze dei tre ingegneri unite al loro impegno diedero il via a un progetto che divenne pubblico solo nel 2009 ed essendo open source ha permesso a molti di collaborare fino alla definizione della prima versione di questo linguaggio nel 2012. Nel sito di Go puoi scoprire le specifiche del linguaggio e le librerie standard, nonché seguire gli sviluppi di questo progetto che tuttora contribuisce al miglioramento e all’arricchimento del linguaggio.
A mio modo di vedere, sono essenzialmente tre i punti di forza del linguaggio Go: stabilità, integrazione e codice ottimizzato.

Stabilità

In questo mondo in continua evoluzione, anche i linguaggi di programmazione si adattano e capita spesso di dover riscrivere delle librerie per programmi che altrimenti non sarebbero compatibili con nuovi hardware e nuovi sistemi operativi.
Go, invece, possiede una peculiarità stabilita sin dalla prima versione, ovvero la compatibilità a lungo termine. I programmi scritti con le precedenti versioni del linguaggio saranno compatibili con le nuove versioni e per un programmatore è molto importante poter ricompilare presto il codice sorgente dei suoi programmi per nuovi sistemi operativi, preoccupandosi al limite di aggiungere nuove funzionalità che il linguaggio o il sistema operativo gli permetteranno di implementare.
Inoltre, Go compila programmi eseguibili indipendenti che non hanno bisogno di portarsi dietro uno stuolo di librerie e ciò contribuisce alla stabilità stessa di un eseguibile.
Le librerie continuano ad esistere, ma in un’ottica diversa che sposta il loro massimo impiego al principio della fase di sviluppo costituendo il prossimo punto di forza.

Integrazione

Le librerie Go sono un bagaglio di codice che in fase di compilazione entra a far parte dell’eseguibile rendendo il file, come già detto, indipendente.
L’integrazione delle librerie comincia già all’inizio dello sviluppo perché la sola istruzione di importazione delle librerie si traduce in una gestione delle dipendenze svolta in automatico dagli strumenti Go e dal compilatore. Tale gestione permette di scaricare nel tuo computer librerie che risiedono in repository remoti, come ad esempio su GitHub dove ho messo del codice di esempio, e quindi poter contare su librerie che vengono aggiornate e migliorate. La gestione, inoltre, concentra tutto il codice Go in una cartella dedicata, chiamata workspace, evitando duplicazione di librerie e confusione.
Ad ogni programmatore è capitato di dover lavorare ancora con una versione precedente di una libreria e per questo nella mia guida ho descritto l’utilità della cartella vendor, una funzionalità divenuta standard nella versione 1.7 di Go, che ti permette di importare librerie staccate da questa gestione automatica senza intaccare il codice sorgente.

Codice ottimizzato

Il maggiore punto di forza del linguaggio Go è proprio il codice. Infatti il linguaggio è stato pensato in un’ottica per così dire proattiva.
La tipizzazione forte delle variabili ti spinge a limitare le conversioni e ad usare meglio i tipi. L’uso dell’istruzione defer ti permette di scrivere funzioni attente al flusso di esecuzione e ti porta ad avere una visione unitaria dell’algoritmo, visione la cui assenza spesso causa errori nel codice.
La gestione degli errori nel codice è così radicata nell’idea di sviluppo con Go che uno dei tipi standard è l’interfaccia error usata spesso come ritorno di funzione. L’errore bloccante è visto come un evento talmente eccezionale che è contraddistinto da una procedura avviata con la funzione panic, panico in italiano, per cui si dice “panicking”, “andare in panico”, a cui però è possibile porre rimedio intercettando la segnalazione di questo errore con la funzione recover nella quale, anche lì, devi gestire l’errore per poter proseguire.
Il linguaggio ha in sé anche un sistema di programmazione asincrona costituito da Goroutines, ovvero thread indipendenti gestiti con un meccanismo di concorrenza, progettato con l’obiettivo di poter far collaborare le funzioni comunicando in maniera ordinata e organizzata attravero i canali.
La diversa concezione che contraddistingue il linguaggio Go si manifesta anche nelle strutture e nelle interfacce con le quali si estendono i tipi in un modello di programmazione orienata agli oggetti molto particolare. Infatti le strutture aggregano dati mentre le interfacce stabiliscono un set di funzioni a cui un tipo aderisce per il solo fatto di implementare tali funzioni. Le interfacce ricoprono un ruolo determinante anche nell’uso dei tipi che non è possibile spiegare con poche parole, persino nella mia guida “Programmare in Linguaggio Go” ho dovuto dividere l’argomento fra due paragrafi.
Il codice, infine, è ottimizzato con l’aggiunta della documentazione che ne permette l’uso, la comprensione e il miglioramento futuro. Per questo motivo, Go prevede l’inserimento della documentazione all’interno dei file di codice come commenti e possiede uno strumento chiamato godoc con il quale è possibile visionare tale documentazione da riga di comando o in un browser web come per qualsiasi libreria standard.

Se vuoi imparare a programmare in Go e scoprire le peculiarità di questo linguaggio, la mia guida in italiano è il punto di partenza per muovere i tuoi primi passi e ti auguro di andare lontano.


Programmare in Linguaggio Go
Renato Mite

Pensata per tutti coloro che vogliono apprendere il linguaggio di programmazione Go, siano aspiranti programmatori o programmatori esperti.
Le specifiche del linguaggio Go sono descritte con esempi di codice, in maniera dettagliata e sintetica proprio come un programmatore esperto vorrebbe.
I concetti sono affrontati in maniera graduale e le peculiarità del linguaggio sono approfondite quando il lettore ha già acquisito le basi. Fra le peculiarità trattate ci sono la relazione fra array e slice, l’implementazione delle interfacce, l’uso dell’interfaccia vuota e l’asserzione del tipo, l’uso dei puntatori, il differimento delle funzioni con l’istruzione defer, la programmazione asincrona con goroutines e canali.

Scopri di più

Disponibile su Amazon, GooglePlay e Kobo.


Note sull’autore

Programmatore per diletto e scrittore per passione, scrive narrativa di vario genere, sia racconti che romanzi.
Appassionato di scienza e informatica, nel 2013 ha pubblicato il suo primo romanzo “Apoptosis”, un thriller fantascientifico in cui un hacker si intrufola nel sistema informatico di una azienda farmaceutica per indagare sui segreti di un nuovo dispositivo di diagnosi medica molto sospetto.

Per sapere di più su Renato Mite, leggere trame, estratti o le storie complete, visita il sito www.renatomite.it