Durchlaufen von Daten in der Schleife mit for-Ausdrücken
Eine weitere gängige Ablaufsteuerung ist eine Schleife. Go verwendet nur ein Schleifenkonstrukt, die for
-Schleife. Aber Sie können Schleifen auf mehr als eine Weise darstellen. In diesem Teil erfahren Sie mehr über die Schleifenmuster, die von Go unterstützt werden.
Einfache Syntax für for-Schleifen
Wie if
- und switch
-Anweisungen erfordern for
-Schleifenausdrücke keine Klammern. Es sind aber geschweifte Klammern erforderlich.
Die drei Komponenten von for
-Schleifen werden durch Semikolons (;
) getrennt:
- Eine anfängliche Anweisung, die vor der ersten Iteration ausgeführt wird (optional).
- Ein Bedingungsausdruck, der vor jeder Iteration ausgewertet wird. Die Schleife wird beendet, wenn diese Bedingung
false
ist. - Eine Nachanweisung, die am Ende jeder Iteration ausgeführt wird (optional).
Wie Sie sehen können, ähnelt die for
-Schleife in Go der for
-Schleife in Programmiersprachen wie C, Java und C#.
In der einfachsten Form sieht eine for
-Schleife in Go wie folgt aus:
func main() {
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
fmt.Println("sum of 1..100 is", sum)
}
Schauen wir uns an, wie Schleifen in Go sonst noch geschrieben werden können.
Leere Vor- und Nachanweisungen
In einigen Programmiersprachen verwenden Sie das Schlüsselwort while
, um Schleifenmuster zu schreiben, bei denen nur der Bedingungsausdruck erforderlich ist. Go besitzt kein while
-Schlüsselwort. Sie können jedoch stattdessen eine for
-Schleife verwenden und die Tatsache nutzen, dass Go Vor- und Nachanweisungen (pre/post) optional macht.
Verwenden Sie den folgenden Codeausschnitt, um zu bestätigen, dass Sie die for
-Schleife ohne Verwendung von Vor- und Nachanweisungen verwenden können.
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)
}
}
Solange die Variable num
einen anderen Wert als 5
enthält, gibt das Programm eine zufällige Zahl aus.
Endlosschleifen und break-Anweisungen
Ein weiteres Schleifenmuster in Go ist die Endlosschleife. In diesem Fall schreiben Sie keinen Bedingungsausdruck oder eine Vor- oder Nachanweisung. Stattdessen erzeugen Sie eine Möglichkeit, die Schleife zu verlassen. Andernfalls wird die Logik nie beendet. Verwenden Sie das Schlüsselwort break
, damit die Logik eine Schleife verlässt.
Um eine richtige Endlosschleife zu erzeugen, lassen Sie auf das Schlüsselwort for
wie folgt geschweifte Klammern folgen:
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)
}
}
Jedes Mal, wenn Sie diesen Code ausführen, erhalten Sie eine andere Ausgabe.
Continue-Anweisungen
In Go können Sie das Schlüsselwort continue
verwenden, um die aktuelle Iteration einer Schleife zu überspringen. Sie können dieses Schlüsselwort z. B. verwenden, um eine Überprüfung durchzuführen, bevor die Schleife fortgesetzt wird. Oder verwenden Sie es, wenn Sie eine Endlosschleife erzeugen und warten müssen, bis eine Ressource verfügbar wird.
In diesem Beispiel wird das Schlüsselwort continue
verwendet:
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)
}
Dieses Beispiel verwendet eine for-Schleife, die von 1 bis 100 durchlaufen wird und in jeder Iteration die aktuelle Zahl zur Summe addiert. Jede durch 5 teilbare Zahl wird in der aktuellen Iteration der Schleife übersprungen und nicht zur Summe addiert.