Salt la conținutul principal
Modulul 2 · Lecția 2 din 57/50 în curs~10 min
Lecții din modul (2/5)

pentru: singura buclă

Go are o singură construcție buclă: for. Nu while, nu do-while, nu foreach (care vine în lecția următoare cu range). Un singur cuvânt cheie acoperă toate cazurile datorită a trei forme.

Cele trei forme de for

Forma clasică cu trei clauze

Identic cu C/Java:

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

i are un domeniu de aplicare limitat la for. Cele trei clauze sunt opționale (puteți omiteți oricare dintre ele), dar ; rămân dacă omiteți unul intermediar.

forma „în timp ce”: numai condiție

În Go, while este pur și simplu un for cu o singură expresie bool:

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

Forma infinită

Fără clauze, bucla nu se termină niciodată (cu excepția cazului în care break/return):

Go
for {
    if exitCondition() {
        break
    }
    doWork()
}

Este modelul pentru bucle de gestionare a evenimentelor, servere, politici de reîncercare.

break, continue și etichete

break iese din bucla cea mai interioară, continue trece la următoarea iterație:

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
}

Pentru a ieși din buclele imbricate există etichete (rar, dar utile):

Go
Esterno:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i*j == 4 {
            break Esterno   // esce da entrambi
        }
    }
}

Niciun operator , ca în C

În Go nu poți scrie for i, j := 0, 10; i < j; i, j = i+1, j-1: expresia post nu acceptă sarcini multiple. Folosește Go's sintaxa de atribuire multiplă:

Go
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
    fmt.Println(i, j)
}

În schimb, aceasta funcționează deoarece i, j = i+1, j-1 este single atribuire multiplă.

Încearcă

Exercițiu#go.m2.l2.e1
Încercări: 0Se încarcă…

Tipăriți numerele de la 0 la 4 inclusiv cu un clasic cu trei clauze pentru.

Se încarcă editorul...
Afișează indiciu

`pentru init; cond; post { ... }` — aici init este `i := 0`.

Soluție disponibilă după 3 încercări

Exercițiu#go.m2.l2.e2
Încercări: 0Se încarcă…

Însumați în total toate numerele de la 1 la 10 inclusiv folosind forma „în timp” a lui for.

Se încarcă editorul...
Afișează indiciu

„în timp ce” formă: „pentru &lt;condiție&gt; { ... }`.

Soluție disponibilă după 3 încercări

Quiz#go.m2.l2.e3
Gata

Care formă reprezintă o buclă infinită în Go?

Go
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }
Opțiuni de răspuns

Recapitulare

  • Un singur cuvânt cheie for cu trei forme: clasic, while, infinit.
  • break / continue opțional cu o etichetă pentru bucle imbricate.
  • Eticheta Name: înainte de for, folosită cu moderație.
  • Nu , ca operator: utilizați atribuirea multiplă i, j = ..., ....