“A cosa serve il linguaggio Go? Non c’erano già valide alternative tra gli altri linguaggi di programmazione? Cosa permette di fare in più degli altri, o in modo diverso?”

Quando compare un nuovo linguaggio di programmazione inventato di recente spesso ci si chiede perché è stato creato nonostante ci fossero alternative validissime in ogni ambito. Potremmo farci la stessa domanda per il linguaggio Go (spesso chiamato anche GoLang) e questo articolo cercherà di fornire le risposte.

In breve, diciamo subito che Go sposa la mentalità del linguaggio C: è compilato e quindi veloce nell’esecuzione. Nonostante non sia dotato di programmazione orientata agli oggetti, riesce però a fornire quella giusta via di mezzo tra la vicinanza all’hardware (la cosiddetta programmazione a “basso livello”) e la produttività del programmatore. Per molti aspetti, si può dire che sia ispirato a Python, con un’ottima gestione delle dipendenze da pacchetti e librerie, permettendo quindi avere bassi tempo di sviluppo e compilazione e sviluppo contemporaneo su più piattaforme.

Più in generale, Go è un linguaggio sviluppato da Google e pubblicato sotto licenza open source. Viene principalmente usato per sviluppare applicazioni web, servizi cloud e gestisce bene funzionalità di networking.

La sintassi di Go

Nonostante esuli  dagli scopi di questo articolo insegnare a programmare in linguaggio Go, vi invitiamo fortemente a sperimentarlo. Questa attività resa assolutamente agevole non solo dalla sua natura multipiattaforma che lo rende disponibile gratuitamente su sistemi Windows, Linux e Mac (si può avviare la procedura di installazione dalla pagina web dedicata)  ma anche dalla possibilità di  accedervi facilmente tramite immagini Docker o ancora più comodamente tramite un apposito Playground disponibile on-line, in cui si potrà direttamente provare il codice all’interno di una pagina web.

Qualsiasi esperimento di programmazione prende piede dal classico Hello world, tipico esempio iniziale di qualsiasi percorso. Ne mostriamo qui di seguito il contenuto tanto per offrire uno scorcio sulla sua sintassi:

package main
import "fmt"
func main(){
fmt.Println("Hello world!")
}

Come si può vedere, la sintassi ricorda molto il C sia come elementi sia come struttura.  Abbiamo infatti una funzione main come entry point del programma (le funzioni vengono indicate con la parola chiave func),  abbiamo il package come contenitore fondamentale del codice e quella istruzione import ci fa capire quanto dal nocciolo centrale del linguaggio si possano importare funzionalità.  Tra l’altro, quest’ultimo è uno dei punti di forza del linguaggio proprio perché Go è assolutamente completo, per qualsiasi attività non ha bisogno di integrare librerie esterne ma mediante il meccanismo di importazione mette già a disposizione funzionalità di ogni genere per elaborare dati, acquisire informazioni e compiere qualsiasi altro genere di task.

Come abbiamo detto, si tratta di un linguaggio compilato quindi il suo codice non viene direttamente interpretato ma è necessario prima sottoporlo a un processo di “trasformazione” per ottenere un eseguibile.

Se si è proceduto all’installazione della piattaforma di sviluppo si potrà comodamente compilare questo programma (supporremo il file si chiami primoesempio.go, dove .go  è l’estensione standard del codice per il linguaggio)  con  la seguente istruzione da riga di comando:

go build primoesempio.go

Sarà così ottenuto un eseguibile di nome primoesempio da invocare ogni volta che si vorrà attivare quello che avremo creato: praticamente, da adesso sarà un normale generico programma da utilizzare nel nostro sistema. In questo caso, abbiamo creato uno script di puro esempio che stampa la frase “Hello world!” ma in generale immaginiamo che avremmo potuto creare un’applicazione importante, voluminosa, direttamente in Go che sarebbe ora disponibile per l’esecuzione.  Tra i tanti strumenti fondamentali esistenti al mondo, creati in Go possiamo pensare a Docker, il sistema che ha prodotto il formato per container più utilizzato ma la lista degli esempi potrebbe essere  molto molto lunga.

Tornando al codice, in realtà avremmo potuto direttamente eseguire il nostro script con il comando:

go run primoesempio.go

senza alcuna compilazione preventiva (quindi senza utilizzare il comando build). Avremmo così ottenuto direttamente un’esecuzione dello script, la prima volta più lenta  in quanto comprensiva di compilazione ma successivamente praticamente istantanea.  Proprio questa velocità di esecuzione dopo la compilazione è uno dei vantaggi  di avere un linguaggio non interpretato ma direttamente compilato.

Perchè un’azienda dovrebbe scegliere Go?

Entriamo ora nel merito dei campi di applicazione di questo linguaggio e perché un’azienda dovrebbe investire nella formazione dei propri dipendenti e collaboratori per imparare a utilizzare Go.

Innanzitutto, possiamo considerare Go un linguaggio semplice da imparare soprattutto per chi ha già esperienza.  Nonostante sia un linguaggio ricchissimo di funzionalità, diventare produttivi nel suo utilizzo non è assolutamente difficile.

Infatti, come già accennato in precedenza, il linguaggio Go mette a disposizione tutto,  anche funzionalità piuttosto complesse e cerca di farlo sempre in maniera piuttosto “amichevole” per i programmatori.

Un esempio piuttosto eloquente di questo aspetto possono essere considerate le goroutine, una metodologia di invocazione asincrona di funzioni contenenti attività onerose, caratterizzate da tempi di latenza lunghi, come accessi in rete, letture e scritture su file e database. Ne risulterà un’attivazione di funzionalità su thread secondari assolutamente indolore. Con le goroutine di Go sarà infatti sufficiente  creare una funzione contenente queste attività più lente e invocarla all’interno del programma anteponendo la parola chiave go.

Go inoltre è un linguaggio universale grazie alla sua natura multipiattaforma. È portabile quindi può essere impiegato liberamente su molti sistemi operativi diversi. E’ in grado di interagire anche con librerie di basso livello e, grazie alla sua fama crescente, è sempre più supportato e disponibile nelle varie piattaforme.

In quali ambiti il linguaggio Go funziona meglio?

Questo linguaggio è sempre più apprezzato nell’ambito Cloud.  Nella programmazione in questo settore infatti vengono premiati sempre più linguaggi dalla sintassi asciutta, veloci portabili, ricchi di funzionalità come, per esempio, Go, Python, Rust e JavaScript.

La sua velocità lo rende ideale per lavori di elaborazione come il trattamento di grandi quantità di dati.  Inoltre, la ricchezza di funzionalità a sua disposizione già integrate nel linguaggio lo rendono utile non solo per trattare dati ma anche per gestire tutto il loro ciclo di vita, per esempio, recuperarli dalla rete mediante interazione, leggerli da file o database e salvarli su vari tipi di destinazione: un linguaggio di questo tipo può essere ideale per costruire un’intera catena di elaborazione di dati dalla sorgente fino alla destinazione finale.

Come abbiamo visto prima, le poche righe del nostro semplicissimo primo esempio in Go sono diventate un eseguibile indipendente da invocare sulla nostra piattaforma e ciò dimostra come sia comodo utilizzarlo per creare strumenti stand-alone da avviare in base alla necessità e offrire prodotti come server fornitori di specifici servizi.

Conclusioni

In questo articolo, abbiamo proposto una serie di punti di forza e aspetti vantaggiosi di questo linguaggio inventato da uno dei principali protagonisti di Internet ovvero Google e curato da un ampissima comunità che lo apprezza, lo arricchisce e soprattutto produce tanta documentazione, esempi e materiale divulgativo per impararlo velocemente.

Questo linguaggio merita l’occasione di poter dimostrare quanto può essere utile all’interno delle attività aziendali e l’ideale, come in molti altri casi, data la facilità di produzione di strumenti di qualsiasi dimensione, sarebbe impiegarlo inizialmente nella realizzazione di servizi specifici in modo da dare al personale la possibilità di formarsi gradualmente e poi integrarlo via via sempre più nelle strutture nevralgiche. Go è un ottimo linguaggio e non difficilmente vi conquisterà!