Impara da zero il linguaggio di Google: sintassi pulita, slice, map, struct e funzioni per costruire software backend veloce e moderno.
Cos'è Go
Go (chiamato anche Golang) è un linguaggio di programmazione moderno, creato da Google nel 2009. È compilato, veloce come il C ma semplice da leggere come Python, ed è pensato per costruire software efficiente e scalabile.
Perché imparare Go
⚡ Veloce: compila in codice macchina nativo
🧹 Semplice: poche parole chiave, sintassi pulita e leggibile
🔀 Concorrenza nativa: le goroutine rendono facile fare più cose insieme
☁️ Cloud e backend: è il linguaggio di Docker, Kubernetes e moltissimi servizi web
💼 Richiestissimo: tra i linguaggi meglio pagati sul mercato
Il classico "Hello World" in Go
📘 Premi ▶ Provalo tu su ogni esempio per leggere e modificare il codice con la sintassi colorata. Per eseguirlo davvero useremo il Go Playground, indicato nel pannello.
Introduzione a Go
Go è nato per risolvere problemi reali di Google: compilazione lenta, codice difficile da mantenere e gestione complicata della concorrenza. Il risultato è un linguaggio minimale ma potente.
Caratteristiche principali
Tipizzazione statica: gli errori di tipo si scoprono già in compilazione
Garbage collector: gestisce la memoria automaticamente
Libreria standard ricca: web server, JSON, crittografia inclusi
Un solo eseguibile: il programma compilato non ha dipendenze esterne
Dove si usa Go
Backend di servizi web e API, strumenti per il cloud (Docker, Kubernetes, Terraform sono scritti in Go), microservizi, strumenti da riga di comando e sistemi ad alte prestazioni.
💡 Go è un ottimo secondo linguaggio: se conosci già le basi (magari da Python o C), lo impari in pochissimo tempo.
Iniziare con Go
Per programmare in Go sul tuo computer scarica il compilatore da go.dev/dl. In alternativa, per esercitarti subito senza installare nulla, usa il Go Playground online.
Struttura di un programma Go
Ogni programma Go inizia con un package. Il programma eseguibile usa package main e una funzione main(), il punto di partenza.
Il tuo primo programma, spiegato
Compilare ed eseguire (nel terminale)
Comandi del terminale
La sintassi di Go
Il codice Go è organizzato in modo rigoroso e pulito. Ecco gli elementi che ritroverai in ogni programma.
package — dichiara a quale pacchetto appartiene il file
import — importa altri pacchetti
func — definisce una funzione
Le parentesi graffe{ } delimitano i blocchi
Anatomia del codice Go
📘 In Go il punto e virgola a fine riga non si scrive: lo aggiunge il compilatore. La parentesi graffa di apertura { deve stare sulla stessa riga di func.
I commenti
I commenti sono note ignorate dal compilatore, utili a spiegare il codice. Go ha due forme, identiche a C, Java e JavaScript.
Commenti su una riga e su più righe
Le variabili
Una variabile è un contenitore con un nome per un valore. In Go si dichiara con var oppure, dentro una funzione, con la forma breve :=.
Dichiarare variabili
📘 La forma breve := funziona solo dentro le funzioni e deduce il tipo dal valore. A livello globale usa sempre var.
⚠️ Go è severo: una variabile dichiarata ma mai usata provoca un errore di compilazione. Niente codice morto!
Le costanti
Una costante è un valore che non può cambiare dopo essere stato definito. Si dichiara con const.
Definire costanti
💡 Usa le costanti per valori fissi (aliquote, limiti, messaggi): rendono il codice più chiaro e impediscono modifiche accidentali.
Stampare a schermo
Il pacchetto fmt offre tre funzioni principali per stampare a schermo.
Funzione
Cosa fa
Print
Stampa senza andare a capo
Println
Stampa e va a capo, con spazi tra i valori
Printf
Stampa con formattazione (segnaposto)
Le tre funzioni di stampa
📘 I segnaposto di Printf: %s per le stringhe, %d per gli interi, %f per i decimali, %v per qualsiasi valore.
I tipi di dato
Go è tipizzato staticamente: ogni variabile ha un tipo preciso. Ecco i tipi fondamentali.
Tipo
Descrizione
Esempio
int
Numeri interi
42, -7
float64
Numeri decimali
3.14
string
Testo
"ciao"
bool
Vero/falso
true, false
I tipi fondamentali
Gli array
Un array è una collezione di elementi dello stesso tipo con dimensione fissa, decisa alla creazione.
Creare e usare array
⚠️ La dimensione di un array fa parte del suo tipo e non può cambiare. Per collezioni che crescono si usano le slice (prossima lezione).
Le slice
Una slice è come un array ma di dimensione dinamica: può crescere e rimpicciolirsi. È la struttura più usata in Go.
Slice e append
💡 Regola pratica: usa sempre le slice a meno che tu non abbia un motivo specifico per una dimensione fissa. append è il tuo strumento quotidiano.
Gli operatori
Gli operatori eseguono operazioni su valori: calcoli, confronti e logica.
Categoria
Operatori
Aritmetici
+ - * / %
Confronto
== != > < >= <=
Logici
&& || !
Operatori in azione
Le condizioni (if/else)
Le condizioni eseguono blocchi di codice diversi a seconda che una condizione sia vera o falsa, con if, else if ed else.
if / else if / else
📘 In Go la condizione non va tra parentesi e le graffe sono obbligatorie, anche per una sola riga.
Lo switch
Lo switch sceglie tra molti casi in modo più leggibile di tanti else if. In Go non serve il break: ogni caso si ferma da solo.
Switch su un valore
💡 A differenza di altri linguaggi, in Go i casi non "cadono" sul successivo: niente break da ricordare. Per il comportamento opposto esiste fallthrough.
I cicli (for)
Go ha un solo costrutto di ciclo: for. Ma è flessibile e copre tutti i casi (incluso il classico while di altri linguaggi).
Le forme del for
📘 Il for ... range è il modo idiomatico di scorrere slice, array e map: restituisce indice e valore di ogni elemento.
Le funzioni
Una funzione raggruppa istruzioni riutilizzabili. In Go i tipi dei parametri e del valore restituito si dichiarano esplicitamente.
Definire e usare funzioni
💡 La possibilità di restituire più valori è una caratteristica amata di Go: si usa moltissimo per restituire un risultato e un eventuale errore.
Le struct
Una struct raggruppa più campi correlati in un unico tipo personalizzato: è il modo di Go per rappresentare "oggetti" come una persona, un prodotto, un punto.
Definire e usare una struct
📘 Le struct sono il cuore di Go: non c'è la parola class, ma combinando struct e metodi si ottiene tutto ciò che serve della programmazione a oggetti.
Le map
Una map associa chiavi a valori (come un dizionario): perfetta per cercare un valore tramite un nome.
Creare e usare una map
💡 La forma valore, esiste := mappa[chiave] è il modo sicuro di controllare se una chiave c'è prima di usarla.
Certificazione Go
Una certificazione su Go attesta la tua capacità di scrivere software backend efficiente e moderno: una competenza molto richiesta e ben pagata, soprattutto unita a un portfolio di progetti reali.
Certificazione
Ente
Note
Go Certificate
W3Schools
Base, ottima per il CV
Google Cloud (Go)
Google
Per backend e cloud su GCP
Il tuo portfolio
—
Progetti su GitHub valgono piu' di ogni badge
Come prepararsi
📐 Padroneggia slice, map, struct e funzioni a piu' valori di ritorno
🔀 Approfondisci goroutine e canali (la concorrenza di Go)
🛠️ Costruisci una piccola API web con la libreria standard net/http
Ogni esempio del corso ha il pulsante ▶ Provalo tu: apre un editor dove leggere e modificare il codice con la sintassi colorata. Per compilarlo ed eseguirlo davvero, usa uno di questi strumenti gratuiti.
Dove eseguire il codice Go
🎮 Go Playground — scrivi ed esegui Go nel browser, senza installare nulla: il modo più rapido per esercitarti
💻 Go ufficiale — installa il compilatore sul tuo computer per i progetti veri
📚 A Tour of Go — il tutorial interattivo ufficiale
Copia questo nel Go Playground
Esercizi Go
Esercizi pratici progressivi. Svolgili nell'editor Provalo tu e poi eseguili sul Go Playground.
Livello base
Stampa il tuo nome e la tua età con Printf
Dichiara due numeri e stampa somma, differenza e prodotto
Crea una slice di 3 città e stampala con un ciclo for-range
Scrivi un if che dica se un numero è pari o dispari
Livello intermedio
Scrivi una funzione che restituisce il maggiore tra due numeri
Usa una map per associare 3 nomi alle loro età
Scrivi uno switch che traduca un numero da 1 a 7 nel giorno della settimana
Crea una struct Prodotto con nome e prezzo, e stampane una
Livello avanzato
Scrivi una funzione che restituisce quoziente e resto di una divisione
Calcola la media dei valori di una slice di interi
Conta quante volte ogni parola appare in una slice, usando una map
Crea una slice di struct Persona e stampa solo i maggiorenni
🎯 Sfida
Scrivi un piccolo programma "rubrica": usa una map[string]string per associare nomi a numeri di telefono, con funzioni per aggiungere, cercare ed eliminare un contatto. È un ottimo modo per mettere insieme map, funzioni e cicli.
Come funziona il compilatore Go
A differenza di Python o JavaScript (interpretati), Go è compilato: il codice sorgente viene tradotto in un eseguibile in codice macchina, velocissimo e senza dipendenze esterne.
I comandi del compilatore
📘 go fmt riformatta il codice secondo lo stile ufficiale: in Go non si discute di stile, è uno solo per tutti. Un grande vantaggio per i team.
Programma del corso
La mappa completa di ciò che copre questo corso, dalle basi alle strutture dati.
Progetto pratico + primo sguardo a goroutine e net/http
💡 Affianca al corso A Tour of Go: è interattivo e copre gli stessi argomenti con altri esempi, ottimo per consolidare.
Domande da colloquio
Go è sempre più richiesto per ruoli backend e cloud. Queste sono le domande più frequenti ai colloqui.
🔹 Qual è la differenza tra un array e una slice?
🔹 Cosa significa che Go è compilato e tipizzato staticamente?
🔹 Come si restituiscono più valori da una funzione?
🔹 Cosa sono le goroutine e i canali?
🔹 Perché in Go non c'è la parola chiave class?
🔹 Come si gestiscono gli errori in Go (il pattern value, err)?
🔹 Cosa fa go fmt e perché è importante?
🔹 Differenza tra var e :=
💡 Punto chiave: Go nasce per la semplicità e la concorrenza. Saper spiegare goroutine e canali, e il pattern di gestione degli errori, fa un'ottima impressione.
Quiz Go
Verifica le tue conoscenze. Le risposte sono in fondo.
Quale package deve avere un programma eseguibile in Go?
Qual è la differenza tra var e :=?
Cosa succede se dichiari una variabile e non la usi?
Qual è la differenza tra array e slice?
Quale funzione aggiunge un elemento a una slice?
Quanti costrutti di ciclo ha Go?
Serve il break nei casi di uno switch?
Come si restituiscono due valori da una funzione?
Cosa raggruppa una struct?
Come si controlla se una chiave esiste in una map?
📘 Risposte: 1) package main. 2) var funziona ovunque ed è esplicito; := è la forma breve solo dentro le funzioni, con tipo dedotto. 3) Errore di compilazione. 4) L'array ha dimensione fissa, la slice è dinamica. 5) append. 6) Uno solo: for. 7) No, ogni caso si ferma da solo. 8) Dichiarando due tipi di ritorno, es. (int, int). 9) Più campi correlati in un tipo personalizzato. 10) Con valore, esiste := mappa[chiave].
Conclusione — E ora?
Hai completato il corso Go! Ora conosci sintassi, tipi, slice, map, struct, funzioni e tutto ciò che serve per scrivere programmi reali in uno dei linguaggi più moderni e richiesti.
I tuoi prossimi passi
🔀 Concorrenza: impara goroutine e canali, il vero superpotere di Go
🌐 Web: costruisci la tua prima API REST con il pacchetto net/http
🐳 Cloud: Go è il linguaggio di Docker e Kubernetes, esploralo in quel mondo
Scrivi un programma da riga di comando completo: un "gestore di attività" (to-do list) che permette di aggiungere, elencare e completare attività, salvandole in una slice di struct. Aggiungi un menu con uno switch e funzioni separate per ogni azione. Pubblicalo su GitHub: sarà il primo progetto Go del tuo portfolio.