Gegevens doorlopen met voor expressies
Een andere algemene controlestroom is een lus. Go gebruikt slechts één lusconstructie en dat is een for
lus. Maar u kunt lussen op meer dan één manier vertegenwoordigen. In dit deel leert u meer over de luspatronen die door Go worden ondersteund.
Basis voor lussyntaxis
Net als if
bij instructies en switch
instructies for
zijn voor lusexpressies geen haakjes vereist. Maar accolades zijn vereist.
Puntkomma's (;
) scheiden de drie onderdelen van for
lussen:
- Een eerste instructie die wordt uitgevoerd vóór de eerste iteratie (optioneel).
- Een voorwaardeexpressie die vóór elke iteratie wordt geëvalueerd. De lus stopt wanneer deze voorwaarde is
false
. - Een poststatement die wordt uitgevoerd aan het einde van elke iteratie (optioneel).
Zoals u ziet, is de for
lus in Go vergelijkbaar met de for
lus in programmeertalen zoals C, Java en C#.
In de eenvoudigste vorm ziet een for
lus in Go er als volgt uit:
func main() {
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
fmt.Println("sum of 1..100 is", sum)
}
Laten we eens kijken hoe u nog meer lussen kunt schrijven in Go.
Lege prestatements en poststatements
In sommige programmeertalen gebruikt u het while
trefwoord om luspatronen te schrijven waarbij alleen de voorwaardeexpressie is vereist. Go heeft geen while
trefwoord. Maar u kunt in plaats daarvan een for
lus gebruiken en profiteren van het feit dat Go prestatements en poststatements optioneel maakt.
Gebruik het volgende codefragment om te bevestigen dat u de for
lus kunt gebruiken zonder prestatements en poststatements te gebruiken.
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
var num int64
rand.Seed(time.Now().Unix())
for num != 5 {
num = rand.Int63n(15)
fmt.Println(num)
}
}
Zolang de num
variabele een andere waarde heeft dan 5
, drukt het programma een willekeurig getal af.
Oneindige lussen en onderbrekingsinstructies
Een ander luspatroon dat u in Go kunt schrijven, is de oneindige lus. In dit geval schrijft u geen voorwaardeexpressie of een prestatement of poststatement. In plaats daarvan schrijft u uw weg uit de lus. Anders wordt de logica nooit afgesloten. Als u de logica een lus wilt laten afsluiten, gebruikt u het break
trefwoord.
Als u een juiste oneindige lus wilt schrijven, volgt u het for
trefwoord met accolades, zoals deze:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
var num int32
sec := time.Now().Unix()
rand.Seed(sec)
for {
fmt.Print("Writing inside the loop...")
if num = rand.Int31n(10); num == 5 {
fmt.Println("finish!")
break
}
fmt.Println(num)
}
}
Telkens wanneer u deze code uitvoert, krijgt u een andere uitvoer.
Continue instructies
In Go kunt u het continue
trefwoord gebruiken om de huidige iteratie van een lus over te slaan. U kunt dit trefwoord bijvoorbeeld gebruiken om een validatie uit te voeren voordat de lus wordt voortgezet. Of gebruik deze wanneer u een oneindige lus schrijft en moet wachten tot een resource beschikbaar is.
In dit voorbeeld wordt het continue
trefwoord gebruikt:
package main
import "fmt"
func main() {
sum := 0
for num := 1; num <= 100; num++ {
if num%5 == 0 {
continue
}
sum += num
}
fmt.Println("The sum of 1 to 100, but excluding numbers divisible by 5, is", sum)
}
In dit voorbeeld wordt een for-lus weergegeven die wordt herhaald van 1 tot 100, waarbij het huidige getal wordt toegevoegd aan de som in elke iteratie. Elk getal deelbaar door 5 wordt overgeslagen in de huidige iteratie van de lus en niet toegevoegd aan de som.