Loopa igenom data med för uttryck
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 5
skriver 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.