0Pricing
Go Academy · Lekcja

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:

  • range dział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

  1. Tablice: kolekcje o stałej długości
  2. Slice: listy dynamiczne
  3. Mapy: magazyny klucz-wartość
  4. Iterowanie po kolekcjach za pomocą range
← Powrót do Go Academy