Impara a programmare con Go
Un'introduzione pratica e accessibile al linguaggio di programmazione Go, pensata per principianti. Il corso è strutturato in lezioni brevi e gestibili, con un tema ispirato all'esplorazione dello spazio, che copre la programmazione imperativa, tipi, funzioni, metodi, raccolte, stato e concorrenza.
Lezioni
Panoramica del corso
📚 Riepilogo del contenuto
Un'introduzione pratica e accessibile al linguaggio di programmazione Go. Il corso è strutturato in lezioni brevi e gestibili, con un tema ispirato all'esplorazione dello spazio, che copre la programmazione imperativa, i tipi, le funzioni, i metodi, le collezioni, lo stato e la concorrenza.
Scopri il piacere della programmazione con Go attraverso brevi lezioni e sette progetti conclusivi di viaggio interstellare.
Autore: Nathan Youngman, Roger Peppé
Ringraziamenti: Jennifer Stout, Marina Michaels, Matthew Merkes, Joel Kotarski, Aleksandar Dragosavljević, Renée French, Olga Shalakhina, Erick Zelaya, April Milne, Monica Kamsvaag.
🎯 Obiettivi di apprendimento
- Definire il linguaggio di programmazione Go e i suoi principali casi d'uso.
- Spiegare il ruolo del compilatore Go e i suoi vantaggi rispetto agli interpreti.
- Navigare nell'ambiente Go Playground per scrivere, compilare ed eseguire codice.
- Strutturare correttamente il codice Go usando lo stile obbligatorio "una vera parentesi", per evitare errori di sintassi.
- Gestire i dati usando diverse tecniche di dichiarazione delle variabili e operatori di assegnazione aritmetica.
- Generare numeri pseudocasuali e implementare logica condizionale usando ramificazioni e operatori logici.
- Dichiarare e formattare variabili floating-point usando
float32efloat64con larghezza e precisione specifiche. - Identificare e mitigare gli errori causati da imprecisioni nei numeri floating-point e dallo scorrimento degli interi.
- Utilizzare il pacchetto
bige le costanti non tipizzate per gestire numeri superiori ai limiti standard di bit. - Definire e invocare funzioni usando parametri, argomenti e sintassi variadica.
🔹 Lezione 1: Lancio in orbita
Panoramica: Questa lezione presenta Go, il linguaggio di programmazione contemporaneo per il calcolo cloud. Gli studenti impareranno la differenza fondamentale tra la natura compilata di Go e i linguaggi interpretati, come utilizzare Go Playground per sperimentare immediatamente e la struttura base di un programma Go, compresi i pacchetti e la funzione main.
Risultati dell'apprendimento:
- Definire il linguaggio di programmazione Go e i suoi principali casi d'uso.
- Spiegare il ruolo del compilatore Go e i suoi vantaggi rispetto agli interpreti.
- Navigare nell'ambiente Go Playground per scrivere, compilare ed eseguire codice.
🔹 Lezione 2: Logica del Controllo Missione
Panoramica: Questa lezione introduce i blocchi fondamentali della programmazione in Go, concentrandosi sulla struttura del codice e sul controllo della sua esecuzione. Gli studenti impareranno lo stile obbligatorio "una vera parentesi" e i punti di ingresso del programma, procederanno con scorciatoie per la dichiarazione delle variabili e gli operatori matematici, e termineranno con la logica decisionale basata su Booleani, confronti e ramificazioni.
Risultati dell'apprendimento:
- Strutturare correttamente il codice Go usando lo stile obbligatorio "una vera parentesi" per evitare errori di sintassi.
- Gestire i dati usando diverse tecniche di dichiarazione delle variabili e operatori di assegnazione aritmetica.
- Generare numeri pseudocasuali e implementare logica condizionale usando ramificazioni e operatori logici.
🔹 Lezione 3: La fisica dei dati spaziali
Panoramica: Questa lezione esplora come Go gestisce i dati numerici, dalle precisioni frazionarie dei numeri floating-point alle scale massicce richieste per distanze astronomiche. Gli studenti impareranno a gestire i limiti della memoria del computer, inclusi gli errori di imprecisione nei numeri floating-point e lo scorrimento degli interi, mentre padroneggiano la conversione esplicita dei tipi e l'uso del pacchetto big per gestire dimensioni numeriche "insolite".
Risultati dell'apprendimento:
- Dichiarare e formattare variabili floating-point usando
float32efloat64con larghezza e precisione specifiche. - Identificare e mitigare gli errori causati da imprecisioni nei numeri floating-point e dallo scorrimento degli interi.
- Utilizzare il pacchetto
bige le costanti non tipizzate per gestire numeri superiori ai limiti standard di bit.
🔹 Lezione 4: Costruzione di moduli modulari
Panoramica: Questa lezione copre i blocchi fondamentali dei programmi Go: funzioni, tipi personalizzati e metodi. Gli studenti impareranno a incapsulare logiche per riutilizzarle, definire nuovi tipi con comportamenti specifici e sfruttare le funzioni di prima classe—including closure e funzioni anonime—per creare codice flessibile e modulare. La lezione si conclude con un progetto pratico su tabelle di conversione della temperatura.
Risultati dell'apprendimento:
- Definire e invocare funzioni usando parametri, argomenti e sintassi variadica.
- Distinguere tra identificatori esportati e non esportati usando le convenzioni di denominazione di Go.
- Creare tipi personalizzati e associarvi comportamenti tramite metodi e ricevitori.
🔹 Lezione 5: Riempimento della stiva
Panoramica: Questa lezione tratta le strutture dati essenziali in Go per gestire collezioni di informazioni. Passa dalle matrici di lunghezza fissa e dal loro comportamento di copia in memoria a slice dinamici che fungono da finestre flessibili sui dati, e infine ai mappe per ricerche chiave-valore efficienti. L'unità culmina nel progetto conclusivo "Gioco della vita", che dimostra come usare slice multidimensionali per simulare sistemi complessi.
Risultati dell'apprendimento:
- Dichiarare, inizializzare e iterare su matrici di lunghezza fissa e griglie multidimensionali.
- Manipolare slice usando intervalli di indice e crescita dinamica tramite la funzione
append. - Gestire l'efficienza della memoria distinguendo tra lunghezza e capacità e preallocando collezioni con
make.
🔹 Lezione 6: Strutturazione degli habitat marziani
Panoramica: Questa lezione introduce l'approccio di Go nell'organizzazione di dati e comportamenti complessi. Gli studenti impareranno a raggruppare tipi di dati diversi in strutture (struct), a inizializzarle usando letterali composti e a gestirne il comportamento tramite metodi e funzioni costruttrici. La lezione esplora anche la filosofia progettuale unica di Go: favorire la composizione rispetto all'ereditarietà e usare interfacce implicite per ottenere polimorfismo.
Risultati dell'apprendimento:
- Definire, inizializzare e copiare strutture per gestire dati complessi relativi alle coordinate marziane e ai rover.
- Codificare strutture Go in formato JSON usando tag di struttura per uno scambio di dati personalizzato.
- Implementare metodi, funzioni costruttrici e incorporamento di strutture per creare codice riutilizzabile e ben organizzato.
🔹 Lezione 7: Navigare nel tunnel del gopher
Panoramica: Questa lezione esplora il potere e la sicurezza dell'indirezione in Go, concentrandosi su come i puntatori permettano una mutazione efficiente dei dati e una gestione della memoria. Fornisce un solido quadro per la programmazione difensiva insegnando agli studenti come gestire valori nil, gestire risorse con defer e implementare modelli idiomatici di gestione degli errori—culminando nell'applicazione di queste regole a un motore di validazione del Sudoku.
Risultati dell'apprendimento:
- Usare l'ampersand (
&) e l'asterisco (*) per gestire indirizzi di memoria e dereferenziare valori. - Implementare parametri e ricevitori puntatore per abilitare la mutazione dei dati nelle funzioni e nei metodi.
- Navigare valori
nilall'interno di slice, mappe e interfacce senza causare panic in tempo di esecuzione.
🔹 Lezione 8: Comunicazione tra rover multipli
Panoramica: Questa lezione introduce i primitivi fondamentali della concorrenza in Go: goroutine e canali. Esplora come eseguire compiti in modo indipendente, comunicare in modo sicuro tra di essi e gestire lo stato condiviso usando Mutex per evitare condizioni di competizione. La lezione si conclude con un progetto conclusivo che simula rover marziani che navigano una griglia e segnalano scoperte.
Risultati dell'apprendimento:
- Avviare e gestire compiti concorrenti usando la parola chiave
go. - Implementare una comunicazione sicura tra goroutine usando canali e l'istruzione
select. - Costruire pipeline di dati e gestire i cicli di vita delle goroutine chiudendo i canali.