Premier Training & Business Partner Red Hat

Il linguaggio Go – prima parte

Andrea Manzini
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

 

 

COS’E’ GO ?

Go è un linguaggio di programmazione, sviluppato presso Google dal 2007 e rilasciato ufficialmente nel novembre 2009 come free software. Opera di affermati esperti nel settore come Robert Griesemer, Rob Pike, e Ken Thompson, ad oggi è uno dei linguaggi più di tendenza nell’IT, e la sua validità sul campo è dimostrata anche dal successo di progetti come Docker, Kubernetes che sono scritti principalmente in Go.

Riassumiamo velocemente principali punti di forza di questo linguaggio…

  • Compila nativamente in codice macchina: non serve virtual machine o interprete. Si ha di conseguenza un immediato vantaggio in termini di velocità ed efficienza.
  • E’ facile: Go ha solo 25 parole chiave e si impara in un pomeriggio. Gli autori hanno fatto delle scelte ben precise per tenere il linguaggio sempre coerente alla sua filosofia iniziale: pulizia, semplicità, praticità e chiarezza.
  • Il compilatore controlla e segnala eventuali errori su sintassi, errori di battitura e nelle conversioni tra tipi di dato, prima ancora di eseguire il programma.
  • Sicurezza: controllo a runtime di stringhe, array, puntatori; la memoria viene allocata e deallocata automaticamente grazie a un eccezionale garbage collector.
  • I compilatori sono disponibili per i principali sistemi operativi: Unix (incluso macOS) , Linux, Windows ; è pienamente supportato il cross-compiling. Supporta anche architetture arm. ppc, s390x
  • Compila staticamente: un binario eseguibile Go contiene al suo interno tutto ciò che gli serve, e quindi può essere distribuito senza dover pensare ad eventuali librerie aggiuntive.
  • Il programmatore ha subito a disposizione una vastissima libreria standard, che comprende i più frequenti casi d’uso. Unicode è gestito nativamente.
  • Si può integrare nativamente con librerie scritte in C
  • Con il compilatore vengono forniti di serie tool per formattare il codice, gestire package esterni, integrazioni con gli ambienti di sviluppo. Test, benchmark e strumenti di profilazione sono già integrati nel linguaggio.
  • Orientato alla programmazione lato server e al multiprocessing; come vedremo più avanti, Go ha dei costrutti (goroutine e channels) che rendono semplicissimo scrivere programmi che sfruttano il parallellismo di architetture multiprocessore.
  • Documentazione estensiva facilmente reperibile; una vastissima comunità attiva e partecipe
  • Ha una mascotte troppo carina!

INSTALLAZIONE

Visitiamo la pagina principale https://golang.org/ e già da questa notiamo subito la filosofia del linguaggio: pochi fronzoli, concetti semplici e chiari: con Go si va subito al sodo. Possiamo perfino provarlo direttamente nel browser senza installare nulla ma scegliendo il link “Download Go” possiamo scaricare il compilatore sul nostro computer. Assumiamo una versione di Linux a 64bit e scarichiamo quindi il file goN.NN.linux-amd64.tar.gz dove N.NN è l’ultima versione disponibile.
Una volta scaricato, basta seguire le istruzioni di installazione che in genere su Linux si riducono a due comandi

$ tar -C /usr/local -xzf goN.NN.linux-amd64.tar.gz
$ export PATH=$PATH:/usr/local/go/bin

per chi volesse invece usare il package manager della propria distribuzione, generalmente il pacchetto prende il nome di ‘golang’, anche se purtroppo la versione pacchettizzata non è sempre allineata con gli ultimi sviluppi, per cui potremmo non avere accesso alle feature più recenti del linguaggio.

Una volta terminata l’installazione, lanciamo subito un

$ go version

e dovremmo ottenere in output la versione installata. A questo punto perchè non provare il classico dei classici !

Hello, Go

// questo è un commento
package main

import "fmt"

func main() {
	fmt.Println("Hello, Go!")
}

salviamo il codice in un file con nome hello.go e compiliamo il nostro primo programma:

$ go run hello.go 
Hello, Go!

il comando compila ed esegue automaticamente il nostro programma; salvo errori il risultato sarà quello atteso!

se invece volessimo ottenere un eseguibile da lanciare eventualmente in un secondo tempo, ci basta dare un

$ go build hello.go
$ ls -la hello*
-rwxrwxr-x  1 andrea andrea 1855871 feb 20 09:01 hello
-rw-rw-r--  1 andrea andrea      99 feb 20 08:46 hello.go

Già da questo esempio possiamo intuire che a sintassi dei programmi Go e’ simile a quella dei linguaggi come C/C++ , Java, C#; ma visto che è molto breve, analizziamo il sorgente riga per riga.

Dopo il commento iniziale, abbiamo la dichiarazione obbligatoria del package. Per convenzione, il package main è quello che contiene la funzione main, ovvero l’inizio del nostro programma. Come vedremo prossimamente, possiamo infatti creare quanti package vogliamo e raggruppare così le nostre funzioni in moduli che poi potranno essere riutilizzati.

Subito dopo abbiamo la direttiva import: serve appunto per dire a Go che vogliamo usare funzioni di un altro package, che si chiameranno appunto “nomepackage.funzione” .

Di seguito la dichiarazione della funzione main, che non ha argomenti e come unica istruzione esegue una chiamata alla funzione Println contenuta nel package fmt, con l’effetto di visualizzare una stringa.

Notiamo anche un dettaglio: Go “esporta” (e quindi rende disponibili ad altri package) tutti i simboli (cioè funzioni e variabili) che iniziano con la lettera maiuscola; per cui se la nostra funzione si fosse chiamata println (minuscolo) non avremmo potuto invocarla, dato che siamo in un package diverso da “fmt”.

Per questa volta ci fermiamo qui; nel prossimo articolo cominceremo ad entrare più nel dettaglio pratico ed esplorare le potenzialità di questo fantastico linguaggio. Nell’attesa consiglio ai lettori di visitare il Tour interattivo per prendere familiarità con la sintassi e fare un po’ di pratica. A presto!

Info about author

Andrea Manzini