Pętla danych za pomocą wyrażeń
Innym typowym przepływem sterowania jest pętla. Funkcja Go używa tylko jednej konstrukcji pętli i jest to pętla for
. Można jednak reprezentować pętle w więcej niż jeden sposób. W tej części poznasz wzorce pętli obsługiwane przez język Go.
Podstawowa składnia pętli
Podobnie jak if
instrukcje i switch
instrukcje, for
wyrażenia pętli nie wymagają nawiasów. Ale nawiasy klamrowe są wymagane.
Średniki (;
) oddzielają trzy składniki for
pętli:
- Początkowa instrukcja wykonywana przed pierwszą iterację (opcjonalnie).
- Wyrażenie warunku, które jest obliczane przed każdą iterację. Pętla zatrzymuje się, gdy ten warunek to
false
. - Stan po wykonaniu na końcu każdej iteracji (opcjonalnie).
Jak widać, pętla for
w języku Go jest podobna do for
pętli w językach programowania, takich jak C, Java i C#.
W najprostszej formie pętla for
w języku Go wygląda następująco:
func main() {
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
fmt.Println("sum of 1..100 is", sum)
}
Zobaczmy, jak można zapisywać pętle w języku Go.
Puste prestatements i poststatements
W niektórych językach programowania słowo kluczowe służy while
do pisania wzorców pętli, w których wymagane jest tylko wyrażenie warunku. Go nie while
ma słowa kluczowego. Można jednak użyć for
pętli i skorzystać z faktu, że go sprawia, że prestatements i poststatements opcjonalne.
Użyj poniższego fragmentu kodu, aby potwierdzić, że możesz użyć for
pętli bez użycia prestatements i 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)
}
}
Jeśli zmienna num
przechowuje wartość inną niż 5
, program wyświetla losową liczbę.
Pętle nieskończone i instrukcje podziału
Innym wzorcem pętli, który można napisać w języku Go, jest nieskończona pętla. W takim przypadku nie piszesz wyrażenia warunku ani prestanmentu ani stanu po jego zakończeniu. Zamiast tego zapisujesz wyjście z pętli. W przeciwnym razie logika nigdy nie zakończy działania. Aby logika zakończyła pętlę, użyj słowa kluczowego break
.
Aby napisać odpowiednią pętlę nieskończoną, postępuj zgodnie for
ze słowem kluczowym z nawiasami klamrowymi, w następujący sposób:
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)
}
}
Za każdym razem, gdy uruchamiasz ten kod, uzyskujesz inne dane wyjściowe.
Instrukcje Continue
W języku Go możesz użyć słowa kluczowego continue
, aby pominąć bieżącą iterację pętli. Możesz użyć tego słowa kluczowego, na przykład, aby uruchomić walidację przed kontynuowaniem pętli. Możesz też użyć go podczas pisania nieskończonej pętli i poczekać, aż zasób stanie się dostępny.
W tym przykładzie użyto słowa kluczowego 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)
}
Ten przykład zawiera pętlę for, która iteruje od 1 do 100, dodając bieżącą liczbę do sumy w każdej iteracji. Każda liczba dzieląca przez 5 jest pomijana w bieżącej iteracji pętli i nie jest dodawana do sumy.