Iterowanie po kolekcjach za pomocą range
Używanie range dla slice'ów, map i napisów
Iterowanie po kolekcjach za pomocą range to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Czym jest range
range to specjalna forma pętli for, która służy do iterowania po tablicach, wycinkach, mapach, ciągach znaków i kanałach. W każdej iteracji zwraca indeks (lub klucz) oraz wartość.
range po slice
Zwraca indeks oraz kopię elementu:
package main
import "fmt"
func main() {
fruits := []string{"apple", "banana", "cherry"}
for i, fruit := range fruits {
fmt.Printf("%d: %s\n", i, fruit)
}
}range po tablicy
Działa identycznie jak w przypadku slice. Elementy tablicy są kopiowane przy każdej iteracji:
package main
import "fmt"
func main() {
nums := [3]int{10, 20, 30}
for _, v := range nums {
fmt.Println(v)
}
}range po mapie
Zwraca klucz i wartość w losowej kolejności:
package main
import "fmt"
func main() {
capitals := map[string]string{
"France": "Paris",
"Japan": "Tokyo",
}
for country, city := range capitals {
fmt.Printf("%s -> %s\n", country, city)
}
}range po napisie
Iteruje po punktach kodowych Unicode (rune), a nie po bajtach. Indeks to pozycja bajtowa początku rune:
package main
import "fmt"
func main() {
for i, r := range "héllo" {
fmt.Printf("%d: %c\n", i, r)
}
}Odrzucanie indeksu
Należy użyć _, aby zignorować indeks, gdy potrzebne są tylko wartości:
package main
import "fmt"
func main() {
total := 0
for _, v := range []int{1, 2, 3, 4, 5} {
total += v
}
fmt.Println(total) // 15
}range tylko po indeksie
Pominięcie wartości powoduje zwracanie tylko indeksu. Jest to przydatne przy modyfikowaniu elementów w miejscu:
package main
import "fmt"
func main() {
s := []int{1, 2, 3}
for i := range s {
s[i] *= 2
}
fmt.Println(s) // [2 4 6]
}range po kanale
range odczytuje dane z kanału do momentu jego zamknięcia:
package main
import "fmt"
func main() {
ch := make(chan int, 3)
ch <- 1; ch <- 2; ch <- 3
close(ch)
for v := range ch {
fmt.Println(v)
}
}Pułapka zmiennej pętli
Zmienna range jest używana ponownie w każdej iteracji — przechwycenie jej adresu w goroutine lub domknięciu to klasyczny błąd:
package main
import "fmt"
func main() {
nums := []int{1, 2, 3}
funcs := make([]func(), 3)
for i, v := range nums {
v := v // shadow with a copy
funcs[i] = func() { fmt.Println(v) }
}
for _, f := range funcs { f() } // 1 2 3
}Modyfikowanie elementów slice
Wartość zwracana przez range jest kopią. Aby ją zmodyfikować, należy użyć indeksu:
package main
import "fmt"
func main() {
s := []int{10, 20, 30}
for i := range s {
s[i]++
}
fmt.Println(s) // [11 21 31]
}Szybkie sprawdzenie
Jaki typ ma zmienna wartości podczas iterowania po napisie?
Podsumowanie: range
Najważniejsze informacje:
rangedziała na slice, tablicach, mapach, napisach i kanałach- Zwraca (indeks, wartość) — każdy z tych elementów można odrzucić za pomocą
_ - Wartości range są kopiami — elementy należy modyfikować za pomocą indeksu
- Napisy zwracają rune, a nie bajty
- Kolejność iterowania po mapie jest losowa
Polecenie do przećwiczenia
Należy użyć range do obliczenia sumy wszystkich wartości w map[string]int, a następnie wyświetlić każdy wpis oraz sumę całkowitą.
Często zadawane pytania
Czy lekcja „Iterowanie po kolekcjach za pomocą range” jest bezpłatna?
Tak — pełny tekst „Iterowanie po kolekcjach za pomocą range” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Iterowanie po kolekcjach za pomocą range”?
Używanie range dla slice'ów, map i napisów Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Iterowanie po kolekcjach za pomocą range”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tablice: kolekcje o stałej długości
- Slice: listy dynamiczne
- Mapy: magazyny klucz-wartość
- Iterowanie po kolekcjach za pomocą range