Loopa igenom data med för uttryck

Slutförd

Ett annat vanligt kontrollflöde är en loop. Go använder bara en loopkonstruktion, och det är en for loop. Men du kan representera loopar på mer än ett sätt. I den här delen får du lära dig mer om de loopmönster som Go stöder.

Grundläggande för loopsyntax

Liksom if -instruktioner och switch -instruktioner for kräver looputtryck inte parenteser. Men klammerparenteser krävs.

Semikolon (;) separerar de tre komponenterna i for slingor:

  • En första instruktion som körs före den första iterationen (valfritt).
  • Ett villkorsuttryck som utvärderas före varje iteration. Loopen stoppas när det här villkoret är false.
  • En poststatement som körs i slutet av varje iteration (valfritt).

Som du ser liknar loopen for i Go loopen for i programmeringsspråk som C, Java och C#.

I sin enklaste form ser en for loop i Go ut så här:

func main() {
    sum := 0
    for i := 1; i <= 100; i++ {
        sum += i
    }
    fmt.Println("sum of 1..100 is", sum)
}

Nu ska vi se hur du annars kan skriva loopar i Go.

Tomma prestatements och poststatements

I vissa programmeringsspråk använder du nyckelordet while för att skriva loopmönster där endast villkorsuttrycket krävs. Go har inget while nyckelord. Men du kan använda en for loop i stället och dra nytta av att Go gör prestatements och poststatements valfria.

Använd följande kodfragment för att bekräfta att du kan använda loopen for utan att använda prestatements och poststatements.

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)
    }
}

Så länge variabeln num innehåller ett annat värde än 5skriver programmet ut ett slumpmässigt tal.

Oändliga loopar och brytsatser

Ett annat loopmönster som du kan skriva i Go är den oändliga loopen. I det här fallet skriver du inte ett villkorsuttryck eller en prestatement eller poststatement. I stället skriver du dig ut ur loopen. Annars avslutas aldrig logiken. Använd nyckelordet för att göra logikavslutet break till en loop.

Om du vill skriva en korrekt oändlig loop följer du nyckelordet for med klammerparenteser, så här:

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)
    }
}

Varje gång du kör den här koden får du olika utdata.

Fortsätt-instruktioner

I Go kan du använda nyckelordet continue för att hoppa över den aktuella iterationen av en loop. Du kan till exempel använda det här nyckelordet för att köra en validering innan loopen fortsätter. Eller använd den när du skriver en oändlig loop och behöver vänta tills en resurs blir tillgänglig.

I det här exemplet används nyckelordet continue :

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)
}

Det här exemplet har en for-loop som itererar från 1 till 100 och lägger till det aktuella talet till summan i varje iteration. Varje tal som är delbart med 5 hoppas över i den aktuella iterationen av loopen och läggs inte till i summan.