Oggi scrivo un articolo diverso dal solito, non parlerò di progetti o simili, ma di un linguaggio nuovo che ho scoperto in questi mesi dedicandomi al mio lavoro di Tesi magistrale (per questo sono stato un po’ assente ma riprenderò presto a pubblicare nuovi progetti) del quale non mancherò di trattare in futuro.
Il linguaggio è Go, sul web lo trovate cercando il termine “Golang”.
Go è un linguaggio di programmazione versatile e potente, premiato nel 2009 e nel 2016 come “Linguaggio di Programmazione dell’anno” dalla TIOBE, una società informatica che si occupa di misurare la qualità del software e cura un indice di popolarità dei linguaggi di programmazione.
Punti di forza del linguaggio Go
- Concorrenza: grazie alle goroutine e ai canali Ł possibile gestire facilmente la chiamata contemporanea di più funzioni e la comunicazione tra di esse. Le goroutine (un esempio è mostrato nel Listato successivo) sono thread indipendenti gestiti da Go in un meccanismo di concorrenza. Questo quindi è molto utile nell’ambito di un server.
- Stabilità: i programmi scritti con le vecchie versioni del linguaggio saranno compatibili con le nuove.
- Documentazione generata automaticamente.
- Comunità molto attiva.
- Linguaggio compilato: Go è un linguaggio compilato. I linguaggi compilati sono noti per la loro velocità e per essere interpretabili facilmente da altri linguaggi e altre macchine.
- Presenza di un compilatore: con un compilatore si ha il vantaggio di poter individuare facilmente errori, sviluppare ed ottimizzare il codice con semplicità.
- Gestione degli errori e ottimizzazione: la gestione degli errori è semplice (gli errori bloccanti sono molto rari ma comunque possono essere intercettati e gestiti). Il compilatore Go è poi in grado di individuare variabili definite ma non utilizzate, pacchetti mancanti, import di pacchetti non necessari o operazioni non valide. Il compilatore rileva questi errori e warning a tempo di compilazione ma si può anche individuare gli errori a run-time.
- Cross compilazione: una caratteristica di Go è di permettere la cross compilazione delle applicazioni e permettere quindi l’esecuzione su altre macchine diverse da quella usata per lo sviluppo. Il compilatore permette di compilare l’applicazione per altre macchine con semplici comandi.
- Garbage Collection: Go libera automaticamente la memoria non più utilizzata e non più necessaria. Il tempo impiegato dal Garbage Collector (GC) di Go è molto basso.
- Scalabilità: Go è stato sviluppato da Google proprio per soddisfare un loro bisogno di tempi di esecuzione veloci anche in caso di molte operazioni eseguite simultaneamente. Ecco dunque che grazie a goroutine e canali non vi sono problemi di gestione della concorrenza anche in caso di molte operazioni.
- CGO: è possibile sviluppare applicazioni in Go richiamando funzioni e parti
di codice implementate in C.
func f(text string ) { for i := 0; i < 3; i++ { fmt. Println (text , ":", i) } } func main () { go f(" goroutine 1") go f(" goroutine 2") } ------------------------ Output : goroutine 1: 0 goroutine 1: 1 goroutine 2: 0 goroutine 1: 2 goroutine 2: 1 goroutine 2: 2