Developer World

Web & Computer

Imparare Go - Introduzione

2019-05-05 16:03:32

Go è un linguaggio sviluppato in Google da Robert Griesemer, Rob Pike, and Ken Thompson. Si tratta di un linguaggio fortemente tipizzato e compilato, la cui sintassi è molto simile a quella del C. Vediamo però i fattori per cui si differenzia ed i motivi per cui dovremmo impararlo.

Le peculiarità di Go

Una delle caratteristiche a mio avviso più importanti di Go è la sua semplicità. Proprio perché si tratta di un linguaggio simile al C, mostra i suoi punti di forza nell'assenza di sovrastrutture tipiche dei linguaggi Object Orientend o Funzionali.

L'utilizzo di un Garbage Collector, di un sistema di gestione della concorrenza di tipo CSP e un sistema di tipi di tipo strutturale sono però i veri punti di forza che lo differenziano dai suoi rivali.

Non dimentichiamo, inoltre, la corposa toolchain, fornita da Google, e disponibile per la maggior parte delle piattaforme (Linux, Windows, macOS) e che può compilare i binari anche per piattaforme Mobile e WebAssembly.

Scaricare Go

La prima cosa da fare è scaricare ed installare la toolchain. Per fare questo basta collegarsi al sito https://golang.org/dl/ e selezionare la piattaforma con cui si lavora. Consiglio di scaricare l'ultima versione (la 1.12.4 in questo momento).

Tutte le toolchain così scaricate possono cross-compilare i vostri file sorgente per tutte le piattaforme target supportate dal linguaggio.

Installare Go

A seconda del sistema operativo utilizzato si devono effettuare passi differenti per installare la toolchain:

  • Se si sta utilizzando Linux è sufficiente scompattare l'archivio all'interno di una cartella (sudo tar -C /usr/local -xzf go1.12.4.linux-amd64.tar.gz); questo processo creerà il percorso /usr/local/go. L'ultimo passo sarà quello di aggiungere /usr/local/go/bin all'interno del PATH (export PATH=$PATH:/usr/local/go/bin).
  • Se si sta utilizzando macOS è sufficiente installare il pacchetto scaricato.
  • Nel caso di Windows, consiglio di utilizzare il pacchetto in formati MSI, che si occupa di tutto uno volta scelto i percorso di installazione (c:\Go di default).

Il workspace di GO

Dopo aver installato la toolchain, è necessario impostare il workspace di go, ovvero una cartella nel nostro file system in cui si troveranno tutti i nostri progetti.

Possiamo farlo impostarlo utilizzando la variabile d'ambiente GOPATH; se non lo facciamo, di default essa assume il valore $HOME/go (o %USERPROFILE%\go).


La struttura del workspace è la seguente:

  • $GOPATH (o %GOPATH%)
    • bin
    • pkg
    • src

Ognuna delle tre cartelle all'interno del workspace contiene una serie di file utilizzati per il funzionamento della toolchain e della compilazione in generale:

  • La cartella bin contiene gli eseguibili compilati tramite go (linea di comando): vedremo nei prossimi episodi di questa serie come sia possibile in go installare dei pacchetti che contengono, oltre a librerie anche comandi eseguibili.
  • La cartella pkg contiene le versioni compilate delle librerie utilizzate all'interno del nostro workspace
  • La cartella src contiene tutti i sorgenti, sia i nostri che quelli delle librerie scaricate.

Per maggiori informazioni riguardo alla struttura e al funzionamento di GOPATH e del go workspace vi rimando a questo link.


Creiamo quindi la nostra directory $HOME/go (o %USERPROFILE%\go) e passiamo al prossimo passo.

Un semplice Hello World!

Come sempre è tradizione quando si impara un nuovo linguaggio di programmazione, creeremo un semplice hello world, così da provare che la toolchain sia installata e funzioni correttamente.

La prima cosa da fare è posizionarci nella cartella sorgente del nostro workspace ($GOPATH/src o %GOPATH%\src) e creare al suo interno una cartella "hello".


Fatto questo entriamo dentro la cartella e creiamo un file chiamato hello.go il cui contenuto potete trovare nel seguente gist.

Il file sorgente

Prima di passare alla compilazione ed esecuzione vera e propria una breve spiegazione del contenuto del file:

  • La prima riga contiene la dichiarazione di un package. Ogni file in go deve risiedere dentro un package, anche se non è necessario che corrisponda al nome della cartella nel file system in cui il file si trova, ritengo sia raccomandabile aderire a questa convenzione per semplicità. Il package main è particolare, in quanto è il package in cui risiede l'eseguibile della nostra applicazione e possiamo utilizzarlo dove riteniamo più opportuno.
  • La terza riga importa un package esterno; fmt è un package di sistema che fornisce le funzioni per la formattazione e la stampa a console utilizzando i classici formati printf derivati dal C.
  • Il codice dalla riga 5 alla riga 7 è il nostro programma vero e proprio. In particolare alla riga 5 definiamo una funzione chiamata main: si tratta di una funzione "speciale" in quanto è quella che viene invocata nel momento in cui lanciamo il programma. Maggiori dettagli sulle funzioni li vedremo nei prossimi episodi di questa serie.
  • Il codice alla riga 6 è quello che esegue "il lavoro sporco", ovvero che stampa a video il nostro saluto al mondo. La particolarità, in questo caso, è che il nome della funzione invocata (Printf) sia preceduto dal nome del package (fmt) separato dal punto; questo è il modo classico di invocare le funzioni importate da altri package.

Compiliamo il nostro codice

A questo punto siamo giunti alla compilazione (e, quindi, verifica dell'installazione della toolchain); sempre nella directory $GOPATH/src/hello (o %GOPATH%\src\hello) eseguiamo - da terminale - il seguente comando:

  • go build

Il sistema dovrebbe compilare il file sorgente che si trova nella cartella in cui lanciamo il comando e generare - sempre nella medesima cartella - un file eseguibile (hello o hello.exe), per eseguire il quale è sufficiente digitare:

  • ./hello (per sistemi Linux e macOS)
  • hello.exe (per sistemi Windows).


Installiamo il nostro eseguibile

A questo punto mi potreste fare questa domanda: "ma non avevi detto che gli eseguibili sarebbero stati posizionati in $GOPATH/bin (o %GOPATH%\bin)?"


Sì effettivamente è cosi, ma per creare gli eseguibili all'interno del path che vi ho indicato è necessario installarli, mediante l'uso del comando:

  • go install

A questo punto il comando è disponibile nel path bin del workspace di go.

Se volete rimuovere il binario così installato è sufficiente eseguire il comando di clean:

  • go clean -i

Vi consiglio di aggiungere $GOPATH/bin (o %GOPATH%\bin) al PATH in modo da poter lanciare i comandi installati in modo semplice da qualunque cartella del file system.

That's all Folks!

Sperando di avere destato la vostra curiosità per questo linguaggio vi aspetto per le prossime puntate in cui vedremo assieme maggiori dettagli di questo linguaggio ad alte prestazioni e della sua toolchain.


Arrivederci!

13