Gegevens doorlopen met voor expressies

Voltooid

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.