Vai al contenuto
eLearner.app
Modulo 2 · Lezione 2 di 57/50 nel corso~10 min
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:

Go
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:

Go
i := 0
for i < 5 {
    fmt.Println(i)
    i++
}

Forma infinita

Senza clausole, il ciclo non termina mai (a meno di break/return):

Go
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:

Go
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):

Go
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:

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

Esercizio#go.m2.l2.e1
Tentativi: 0Caricamento…

Stampa i numeri da 0 a 4 inclusi con un for classico a tre clausole.

Caricamento editor…
Mostra suggerimento

`for init; cond; post { ... }` — qui init è `i := 0`.

Soluzione disponibile dopo 3 tentativi

Esercizio#go.m2.l2.e2
Tentativi: 0Caricamento…

Somma in total tutti i numeri da 1 a 10 inclusi usando la forma 'while' del for.

Caricamento editor…
Mostra suggerimento

Forma 'while': `for <condizione> { ... }`.

Soluzione disponibile dopo 3 tentativi

Quiz#go.m2.l2.e3
Pronto

Quale forma rappresenta un ciclo infinito in Go?

Go
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }
Opzioni di risposta

Recap

  • Una sola keyword for con tre forme: classica, while, infinita.
  • break / continue opzionalmente con label per cicli annidati.
  • Label Nome: prima del for, usate con parsimonia.
  • Niente , come operatore: usa l'assegnazione plurale i, j = ..., ....