Google ha reso pubblico il linguaggio Go nel 2011 proponendo un approccio del tutto originale alla programmazione. Go ha portato con sè uno stile molto simile al
linguaggio C, privo di programmazione a oggetti ma carico di una flessibilità che l'ha reso sempre più famoso.
Installazione e primo utilizzo
È un linguaggio multipiattaforma, disponibile per Windows, Linux e Mac, nonché in un pacchetto di sorgenti. Tutte queste opzioni sono descritte
alla pagina Downloads del sito ufficiale dove sarà consultabile anche una lunga lista di versioni meno recenti. L'installazione non presenta
grandi difficoltà richiedendo solo la scelta del pacchetto più adatto al proprio ambiente di lavoro ed il suo avvio. Tuttavia
Go può essere eseguito in vari modi. In primis, si consideri la disponibilità di immagini Docker (qui) per l'esportazione
di propri programmi in architetture a microservizi come quelle gestibili in Cloud grazie a piattaforme quali Jelastic Cloud.
Inoltre, si può direttamente provare e studiare Go on-line grazie al Playground accessibile dall'homepage del progetto come mostra la seguente figura:
Questo è costituito da un'area di testo in cui scrivere direttamente il codice per vederlo eseguire alla pressione del pulsante Run: l'output verrà fornito direttamente al di sotto dell'area
di testo. Il menù a tendina a sinistra del pulsante Run che, in figura, mostra la dicitura Hello, World! è un selettore per richiedere un modello di programma già pronto. Noi
qui abbiamo visto il più semplice ma se ne possono visualizzare diversi illustrativi di molti elementi del linguaggio. Infine si noti che in alto a destra c'è il link Open in Playground che permette di
aprire il tool in una scheda separata del browser.
Tramite il cosiddetto servizio Try Go abbiamo intravisto un pò di sintassi del linguaggio pertanto non resta altro che iniziare a studiarlo.
Primo programma in Go
Il nostro primo programma in Go richiama le righe appena vista nella console Try Go:
package main
import "fmt"
func main(){
fmt.Println("Ciao mondo!")
}
Una volta salvato nel file esempio.go, può essere eseguito da riga di comando con:
go run esempio.go
Come si presuppone, otteniamo in output la stampa della stringa "Ciao mondo!" ma l'esperimento torna
utile per iniziare a conoscere tre elementi fondamentali del linguaggio:
- la definizione di un package;
- l'importazione di un package;
- la creazione di una funzione ed in particolare della funzione main.
Il codice che eseguiamo è la riga fmt.Println("Ciao mondo!")
che si incarica
di svolgere l'unica azione del programma ovvero stampare in output il messaggio. Una funzione in Go, come in ogni
altro linguaggio di programmazione, consiste in un blocco di codice, costituito da uno o più righe, a cui viene
assegnato un nome. Verranno scritte funzioni per gli scopi più disparati ma noi qui non abbiamo scritto una funzione
qualsiasi bensì la funzione main del package main ovvero l'entry point del programma. Affinchè un programma
Go venga avviato deve contenere un package di nome main che esponga una funzione main che non riceva argomenti e non
restituisca risultato. Cosa siano argomenti e risultato di una funzione lo si capirà meglio al momento opportuno
ma per ora è sufficiente fissare bene che un programma Go può partire solo se contiene un file avente la seguente struttura:
package main
func main(){
...
...
}
Tutto il sistema di funzionalità di Go è basato sui package, "librerie" di funzionalità che possono essere messe a disposizione del
nostro programma quando serve. Qui, ad esempio, abbiamo bisogno di stampare in output il messaggio pertanto chiediamo l'intervento della
funzione Println
appartenente al package fmt che contiene tutto ciò che serve all'input/output e alla formattazione dei contenuti.
Per far ciò importiamo il package fmt con:
import "fmt"
e da lì in poi potremo richiamare la funzione Println
usando fmt come prefisso.
L'importazione dei package è tipicamente uno dei primi passaggi di un programma Go e generalmente sarà richiesta l'importazione di più di essi. Ciò
può essere fatto utilizzando le parentesi tonde su una o più righe. Avessimo voluto importare non solo fmt ma anche math, contenitore di funzioni matematiche,
avremmo potuto usare la sintassi:
import ("fmt"; "math")
o in alternativa:
import ("fmt"
"math")
La seconda molto comune quando i package da importare sono numerosi.