Il linguaggio Go di Google è nato in un contesto open source con lo scopo di realizzare applicazioni sicure ed efficienti in virtù di caratteristiche interessanti, tra strutture dati avanzate e gestione della memoria automatica.
Questo linguaggio di programmazione è stato sviluppato dal colosso di Mountain View a partire dal mese di settembre del 2007 per opera di Ken Thompson, di Rob Pike e di Robert Griesemer, a partire da un lavoro precedente connesso con Inferno, sistema operativo che consente di realizzare e supportare servizi distribuiti.
Il motivo per cui si è pensato al linguaggio Go è che fino a quel momento non esisteva alcun linguaggio che fosse in grado di assecondare il bisogno della velocità di esecuzione coniugandolo con l’efficienza della compilazione e con la semplicità di programmazione. Dopo più di due anni di lavoro, Go è stato ufficialmente annunciato nell’inverno del 2009.
Lo scopo del progetto che ha portato alla creazione di Go è stato quello di far fronte al mutamento dello scenario informatico di quel periodo: nel decennio precedente alla comparsa di questo linguaggio di programmazione, infatti, i computer sono diventati molto più veloci, ma questo cambiamento non è stato affiancato da un aumento di velocità dei software. Inoltre, alcuni concetti fondamentali come quelli relativi alla computazione parallela o alla garbage collection non erano supportati in modo adeguato dai sistemi di linguaggi più popolari (della garbage collection parleremo in seguito; la computazione parallela, nota anche come calcolo parallelo, non è altro che la simultanea esecuzione del codice sorgente di uno stesso programma o di diversi programmi su core differenti dello stesso processore o su microprocessori differenti, per fare in modo che il sistema di elaborazione abbia prestazioni di calcolo superiori).
Il linguaggio ha la capacità di soddisfare le necessità della programmazione concorrente; i compilatori sono disponibili per Windows, per Linux e per la maggior parte dei sistemi che si basano su Unix, compreso macOS.
Progettato con l’idea di ottimizzare i tempi di compilazione non solo per gli hardware più efficienti, ma anche per quelli meno performanti, si caratterizza per una sintassi che si avvicina a quella del linguaggio C, anche se nei costrutti if e for non ci sono le parentesi tonde; anche la dichiarazione dei tipi rappresenta una differenza rispetto a C.
La gestione della memoria viene affidata, nel linguaggio Go di Google, a un sistema di garbage collection, che la amministra in maniera autonoma. La garbage collection, a volte indicata come GC, è – come lascia intuire il suo stesso nome – una sorta di raccolta di rifiuti, e corrisponde a una modalità di gestione della memoria attraverso cui un modulo di run-time e un compilatore o un sistema operativo vanno a liberare quelle porzioni di memoria che in seguito le applicazioni non dovranno più impiegare. Le aree di memoria allocate da un processo attivo, e non più referenziate, vengono annotate, in modo da poter essere liberate in automatico.
Tra le altre peculiarità che vale la pena di mettere in evidenza a proposito del linguaggio Go di Google è bene notare che nel 2009 la TIOBE Software, che è un’azienda che monitora la diffusione e la popolarità dei linguaggi di programmazione, lo ha nominato Linguaggio di Programmazione dell’Anno.
Go, infine, rientra nel novero dei linguaggi ufficiali per la programmazione del servizio Platform-as-a-Service del cloud di Mountain View, e cioè Google App Engine, insieme a Java, a PHP e a Python. Insomma, una realtà che nel giro di pochi anni ha conosciuto un notevole sviluppo e un successo significativo.