GO il nuovo linguaggio web di Google

Google-GO

Google-GO new Web language

Che cosa è Go?
Go (chiamato anche GoLang) è un linguaggio di programmazione realizzato da Google. La progettazione è cominciata nel 2007. Tra gli ideatori del linguaggio ci sono anche nomi come Ken Thompson, Rob Pike, Robert Griesemer (i primi due sono stati anche tra i creatori del sistema operativo Unix). Il progetto è stato annunciato pubblicamente nel novembre 2009, e la versione 1.0 è uscita nel marzo 2012.

 

Le caratteristiche di Go
Go è un linguaggio statically-typed, significa che la verifica dei tipi di variabili è effettuata durante la compilazione (cosi come accade per C, Java, Scala e Pascal) e non durante il run-time (come accade per JavaScript, PHP, Python e Ruby).
Go soddisfa le esigenze della programmazione concorrente ed è stato progettato per ottimizzare i tempi di compilazione anche per hardware modesti. La sintassi è vicina al C eccetto per la dichiarazione dei tipi e per la mancanza di parentesi tonde nei costrutti for e if. Ha un sistema di garbage collection che si occupa autonomamente della gestione della memoria. Non include l’intercettazione di eccezioni, l’eredità dei tipi, la programmazione generica, le asserzioni e l’overloading dei metodi.

 

Go, linguaggio ideale per i webservices
Come accennato poco sopra, Go nasce come linguaggio generalista, ma negli ultimi anni di sviluppo si è affermato come linguaggio ideale per i webservices. Il motivo di questo successo si deve principalmente a tre aspetti:

  • facilità di deployment,
  • efficienza nell’uso della memoria,
  • gestione della concorrenza

Facilità di deployment
Rispetto ad altri linguaggi, Go ci permette di effettuare un server deployment estremamente semplice. Sulla macchina di produzione non è dunque necessario installare alcun webserver (Apache o Nginx), alcuna Virtual Machine (come in Java), alcun tipo di wrapper (come l’WSGI per il Python) e neppure nessuna componente del linguaggio Go.
Sara’ sufficiente copiare l’eseguibile Go e farlo girare sul server come un normale servizio.

Il file eseguibile di Go contiene gia tutto al suo interno:

  • il codice, il Go runtime,
  • il webserver,
  • eventuali libraries

Le dimensioni sono cosi’ particolarmente ridotte, in genere intorno ai 10 MB, ed i tempi di compilazione sono tra l’altro immediati, tipicamente meno di 1 secondo, ed è possibile fare cross-compilation da e per qualunque tipo di sistema operativo: Linux, Mac, Windows.

 

Efficienza nell’utilizzo della memoria
In termini di efficienza nell’utilizzo della memoria, Go è comparabile al linguaggio C, eliminando però molta della complessità tipica del C, utilizzando pattern di programmazione più solidi e intuitivi. Il garbage collector in Go è estremamente performante e, dalla versione 1.5 (oggi Maggio 2017 siamo alla versione 1.8.3) ha raggiunto una latenza molto vicina allo zero.

Comparata a quella di Java, l’impronta in memoria di Go è una frazione minuscola. Questo permette alle applicazioni scritte in Go di essere, oltre che semplici da scrivere, anche estremamente performanti, e di richiedere risorse hardware molto ridotte, ottimo ad esempio per ambienti su Docker.

 

Concurrency
Il fiore all’occhiello di Go è necessariamente l’estrema facilità con cui si possono scrivere applicazioni che utilizzano codice concorrente. Infatti, oltre ad essere sintatticamente semplici da scrivere, sono anche estremamente performanti. Nessun’ altro linguaggio di programmazione si avvicina a Go in questo aspetto.

La concorrenza in Go si può implementare in due modi: tramite i canali, che si ispirano alle teorie CSP (Communicating Sequential Processes) di C. Hoare, e tramite le goroutines, funzioni che possono essere eseguite in modo concorrente anche nell’ordine di molte migliaia.

Go inoltre offre uno strumento molto efficace per identificare eventuali data-race, ossia le situazioni in cui due
go-routine accedono alla stessa variabile in modo concorrente e almeno uno dei due accessi è in scrittura.

Altra novità molto interessante: Go è uno dei linguaggi ufficiali per la programmazione su Google App Engine – il servizio PaaS (Platform-as-a-Service) del Cloud di Big G – oltre a Python, PHP e Java. Proprio in questi giorni è stato annunciato che il supporto per Go sulla piattaforma non è più in fase beta ma risulta disponibile tra i servizi GA (Generally Available).

 

Non resta che provare ad adattarlo alle nostre esigenze !.