Vai al contenuto
eLearner.app

Fine del Corso Go

Riepilogo e sfida finale

Complimenti: hai attraversato i 10 moduli del Corso Go — dalle prime var e := fino a goroutine, channel, generics, e un piccolo server HTTP idiomatico. 10 moduli, 50 lezioni, 150 esercizi: il tuo Go ora copre tutti gli idiomi che incontri davvero in un progetto reale. Qui sotto la mappa di quello che padroneggi e una sfida finale in tre tappe.

Promemoria: gli esercizi Go si verificano staticamente (parole chiave). Per eseguire il codice davvero, ogni esercizio offre il bottone Apri su Go Playground che copia il codice e apre go.dev/play.

01 · Basi

  • var / := / const
  • tipi base
  • zero value
  • package main

02 · Controllo del flusso

  • if con init
  • for / for-range
  • switch
  • defer

03 · Funzioni

  • ritorni multipli
  • named result
  • variadici
  • closure

04 · Collezioni

  • array vs slice
  • append / copy
  • map
  • string e rune

05 · Struct e metodi

  • struct
  • value vs pointer receiver
  • composizione (embedding)
  • tag json

06 · Interfacce

  • implementazione implicita
  • type assertion
  • type switch
  • Stringer / error

07 · Concorrenza

  • goroutine
  • channel
  • select
  • sync / context

08 · Stdlib

  • fmt
  • strings / strconv
  • io / os
  • time
  • encoding/json

09 · Test e moduli

  • testing
  • table-driven
  • benchmark
  • go.mod / go.sum
  • build tags

10 · Pratica idiomatica

  • naming
  • errori (%w / Is / As)
  • generics
  • CLI
  • HTTP server

La sfida finale, in tre tappe

Immagina un piccolo strumento che riceve testo, lo analizza, ed espone un endpoint HTTP con il risultato in JSON. Costruisci i tre pezzi: il filtro slice, l'aggregatore con map e un handler HTTP. Ogni tappa combina concetti dei moduli che hai studiato — niente di nuovo, solo idiomi conosciuti messi insieme.

1 · Filtra numeri pari

Scrivi Pari(nums []int) []int: ritorna solo i numeri pari, nello stesso ordine. Modulo 4 (slice) + Modulo 2 (for-range / if).

Esercizio#go.boss.e1
Tentativi: 0Caricamento…

Definisci func Pari(nums []int) []int che ritorna solo i numeri pari di nums, mantenendo l'ordine. Usa for-range, l'operatore %% (resto) e append.

Caricamento editor…
Mostra suggerimento

for _, n := range nums; if n%2 == 0 { out = append(out, n) }.

Soluzione disponibile dopo 3 tentativi

2 · Conta le parole

Scrivi Conta(testo string) map[string]int: separa per spazi e ritorna quante volte appare ogni parola. Modulo 8 (strings) + Modulo 4 (map).

Esercizio#go.boss.e2
Tentativi: 0Caricamento…

Definisci func Conta(testo string) map[string]int che usa strings.Fields per separare per spazi e ritorna una map con il conteggio di ogni parola. Inizializza la map con make(map[string]int) o letterale {}.

Caricamento editor…
Mostra suggerimento

out := make(map[string]int); for _, w := range strings.Fields(testo) { out[w]++ }.

Soluzione disponibile dopo 3 tentativi

3 · Handler HTTP che ritorna JSON

Definisci un handler che riceve ?q=testo, conta le parole e risponde con JSON. Modulo 10 (HTTP) + Modulo 8 (encoding/json) + Modulo 4 (map).

Esercizio#go.boss.e3
Tentativi: 0Caricamento…

Definisci func ContaHandler(w http.ResponseWriter, r *http.Request) che: legge il query parameter "q", chiama Conta(q) (gia' importata), imposta Content-Type: application/json e scrive la map come JSON con json.NewEncoder(w).Encode. Modulo 10 (http) + Modulo 8 (json).

Caricamento editor…
Mostra suggerimento

r.URL.Query().Get("q"); w.Header().Set("Content-Type", "application/json"); json.NewEncoder(w).Encode(Conta(q)).

Soluzione disponibile dopo 3 tentativi

Cheatsheet stampabile

Una pagina con tutta la sintassi essenziale di Go (1.21+), pronta da tenere sotto mano mentre programmi.

Apri il cheatsheet

E adesso?

Il modo migliore per consolidare e' pratica libera. Apri il Playground Go (o un tuo progetto con go mod init) e prova a costruire un piccolo strumento end-to-end: una CLI con flag che legge un file, conta le parole ed espone i risultati con un piccolo server HTTP — esattamente i tre pezzi della sfida qui sopra, ma uniti.