Introduzione
Che cos’e Go?
Go, noto anche come Golang, e un linguaggio di programmazione open source creato da Google nel 2009. E stato progettato per essere semplice, efficiente e altamente performante, con un focus particolare sulla programmazione concorrente e sulla scalabilita.
Go e un linguaggio compilato e tipizzato staticamente, il che significa che il codice viene trasformato direttamente in codice macchina e che i tipi delle variabili vengono verificati durante la compilazione, non a runtime.
Storia di Go
Go e nato nel 2007, quando tre ingegneri di Google – Rob Pike, Ken Thompson e Robert Griesemer – iniziarono a lavorare su un nuovo linguaggio di programmazione. La motivazione principale era la frustrazione con i linguaggi esistenti utilizzati internamente da Google, come C++ e Java, che soffrivano di tempi di compilazione lunghi e complessita crescente.
- Rob Pike: co-creatore del sistema operativo Plan 9 e del sistema di codifica UTF-8.
- Ken Thompson: co-creatore del sistema operativo Unix e del linguaggio B, predecessore del C.
- Robert Griesemer: ingegnere con esperienza nella progettazione di compilatori e macchine virtuali.
Go fu annunciato pubblicamente nel novembre 2009 e la versione 1.0 fu rilasciata nel marzo 2012. Da allora, il linguaggio ha mantenuto una forte garanzia di compatibilita con le versioni precedenti.
// Il primo programma Go e molto semplice
package main
import "fmt"
func main() {
fmt.Println("Ciao, mondo!")
}
Perche Go e popolare?
Go ha guadagnato enorme popolarita per diverse ragioni fondamentali:
Semplicita
Go ha una sintassi minimalista con solo 25 parole chiave. Non ci sono classi, ereditarieta, eccezioni tradizionali o generici complessi. Questo rende il linguaggio facile da imparare e da leggere.
Compilazione veloce
Il compilatore di Go e estremamente rapido. Anche progetti di grandi dimensioni vengono compilati in pochi secondi, migliorando significativamente la produttivita degli sviluppatori.
Concorrenza nativa
Go supporta la concorrenza come caratteristica fondamentale del linguaggio attraverso le goroutine e i channel, rendendo semplice scrivere programmi che eseguono operazioni in parallelo.
package main
import (
"fmt"
"time"
)
func saluta(nome string) {
fmt.Printf("Ciao, %s!\n", nome)
}
func main() {
// Avvia una goroutine
go saluta("Mario")
go saluta("Luigi")
// Attendi che le goroutine completino
time.Sleep(time.Second)
}
Tipizzazione statica
Il sistema di tipi di Go cattura molti errori durante la compilazione, prima che il codice venga eseguito, riducendo i bug in produzione.
Libreria standard ricca
Go include una libreria standard completa per networking, HTTP, crittografia, gestione di file e molto altro, senza necessita di dipendenze esterne per molte operazioni comuni.
Casi d’uso principali
Go e utilizzato in una vasta gamma di ambiti:
- Servizi cloud e infrastruttura: Docker, Kubernetes e Terraform sono tutti scritti in Go.
- Microservizi: la leggerezza delle goroutine e la velocita di esecuzione lo rendono ideale per architetture a microservizi.
- Strumenti CLI: molti strumenti da riga di comando moderni sono scritti in Go grazie alla facilita di distribuzione di un singolo binario.
- DevOps e automazione: strumenti come Prometheus, Grafana e Hugo utilizzano Go.
- API e server web: il pacchetto
net/httpintegrato rende semplice creare server web performanti.
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Benvenuto nel server Go!")
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("Server in ascolto sulla porta 8080...")
http.ListenAndServe(":8080", nil)
}
La filosofia di Go
Go segue alcuni principi fondamentali:
- Semplicita sopra complessita: ogni funzionalita deve giustificare la propria esistenza. Se qualcosa puo essere fatto in modo semplice, non serve complicarlo.
- Leggibilita: il codice viene letto molte piu volte di quante venga scritto. Go favorisce la chiarezza.
- Praticita: Go e progettato per risolvere problemi reali nel mondo dello sviluppo software, non per esplorare concetti accademici.
- Un solo modo di fare le cose: Go promuove un unico stile idiomatico, supportato dallo strumento
gofmtche formatta automaticamente il codice. - Composizione sopra ereditarieta: invece dell’ereditarieta delle classi, Go utilizza interfacce e composizione di struct.
Go nel 2026
Con la versione Go 1.23 e successive, il linguaggio ha introdotto miglioramenti significativi come iteratori nella libreria standard, ottimizzazioni del garbage collector e nuove funzionalita per il tooling. La comunita Go continua a crescere e il linguaggio rimane una delle scelte principali per lo sviluppo backend moderno.
Conclusione
Go e un linguaggio di programmazione moderno che combina la semplicita di linguaggi come Python con le prestazioni di linguaggi compilati come C. La sua filosofia pragmatica, il supporto nativo per la concorrenza e l’ecosistema ricco lo rendono una scelta eccellente sia per principianti che per sviluppatori esperti. Nelle prossime sezioni, esploreremo come installare Go e iniziare a scrivere i primi programmi.