Lezioni del modulo (2/5)
for: l’unico ciclo
Go ha un solo costrutto di ciclo: for. Niente while, niente
do-while, niente foreach (quello arriva nella prossima lezione con
range). Una sola keyword copre tutti i casi grazie a tre forme.
Le tre forme di for
Forma classica a tre clausole
Identica a C/Java:
for i := 0; i < 5; i++ {
fmt.Println(i)
}i ha scope limitato al for. Le tre clausole sono opzionali (puoi
ometterne qualunque) ma i ; rimangono se ne ometti una intermedia.
Forma "while": solo condizione
In Go il while è semplicemente un for con una sola espressione bool:
i := 0
for i < 5 {
fmt.Println(i)
i++
}Forma infinita
Senza clausole, il ciclo non termina mai (a meno di break/return):
for {
if exitCondition() {
break
}
doWork()
}È il pattern per loop di event handling, server, retry policy.
break, continue e label
break esce dal ciclo più interno, continue salta all'iterazione
successiva:
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue // salta i pari
}
if i > 7 {
break // ferma il ciclo
}
fmt.Println(i) // 1 3 5 7
}Per uscire da cicli annidati esistono le label (rare ma utili):
Esterno:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i*j == 4 {
break Esterno // esce da entrambi
}
}
}Niente operatore , come in C
In Go non puoi scrivere for i, j := 0, 10; i < j; i, j = i+1, j-1:
l'espressione di post non accetta più assegnamenti. Usa la sintassi
multipla del Go:
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
fmt.Println(i, j)
}Questo invece funziona perché i, j = i+1, j-1 è una singola
assegnazione plurale.
Prova tu
Stampa i numeri da 0 a 4 inclusi con un for classico a tre clausole.
Mostra suggerimento
`for init; cond; post { ... }` — qui init è `i := 0`.
Soluzione disponibile dopo 3 tentativi
Somma in total tutti i numeri da 1 a 10 inclusi usando la forma 'while' del for.
Mostra suggerimento
Forma 'while': `for <condizione> { ... }`.
Soluzione disponibile dopo 3 tentativi
Quale forma rappresenta un ciclo infinito in Go?
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }Recap
- Una sola keyword
forcon tre forme: classica, while, infinita. break/continueopzionalmente con label per cicli annidati.- Label
Nome:prima delfor, usate con parsimonia. - Niente
,come operatore: usa l'assegnazione pluralei, j = ..., ....