Lompati ke konten utama
Modul 2 · Pelajaran 3 dari 58/50 dalam kursus~10 min
Pelajaran modul (3/5)

untuk...jarak

for ... range adalah cara idiomatis untuk mengulangi koleksi: irisan, array, peta, string dan saluran. Sintaksnya sedikit berubah tergantung koleksinya, tapi pola dasarnya selalu sama: for key, value := range coll { ... }.

Berkisar pada irisan dan array

Mengembalikan indeks dan salinan nilai:

Go
nums := []int{10, 20, 30}
for i, v := range nums {
    fmt.Println(i, v)
}
// 0 10
// 1 20
// 2 30

Seringkali salah satu dari keduanya sudah cukup:

Go
// solo indice
for i := range nums { _ = i }

// solo valore (ignora indice con _)
for _, v := range nums { _ = v }

Rentang di peta

Mengembalikan kunci dan nilai:

Go
prices := map[string]int{"pane": 2, "latte": 3, "vino": 8}
for k, v := range prices {
    fmt.Println(k, v)
}

Rentang string: rune, bukan byte

for i, r := range s mengulangi per titik kode Unicode (rune), bukan per byte. Indeks i adalah offset byte dari awal rune.

Go
for i, r := range "èé" {
    fmt.Printf("%d %c (%U)\n", i, r, r)
}
// 0 è (U+00E8)
// 2 é (U+00E9)

Untuk mengulangi per byte gunakan pengindeksan klasik:

Go
s := "ciao"
for i := 0; i < len(s); i++ {
    fmt.Println(s[i])  // byte (uint8)
}

Rentang pada suatu saluran

Iterasi hingga saluran ditutup:

Go
ch := make(chan int)
go func() {
    for i := 0; i < 3; i++ { ch <- i }
    close(ch)
}()
for v := range ch {
    fmt.Println(v)
}

Kami akan menggali lebih dalam modul Konkurensi.

Cobalah

Latihan#go.m2.l3.e1
Upaya: 0Memuat…

Cetak indeks dan nilai setiap elemen angka menggunakan for-range.

Memuat editor…

Solusi tersedia setelah 3 upaya

Latihan#go.m2.l3.e2
Upaya: 0Memuat…

Jumlahkan total semua nilai angka dengan mengabaikan indeks.

Memuat editor…
Tunjukkan petunjuk

Gunakan `_` untuk membuang indeks.

Solusi tersedia setelah 3 upaya

Quiz#go.m2.l3.e3
Siap

Apa yang diwakili oleh variabel pertama dalam `untuk k, v := rentang m` jika m adalah peta?

Go
m := map[string]int{"a": 1, "b": 2}
for k, v := range m { fmt.Println(k, v) }
Pilihan jawaban

Rekap

  • for k, v := range coll dengan cakupan yang jelas: buang dengan _ yang tidak digunakan.
  • Irisan/array: indeks + SALINAN nilainya. Untuk bermutasi, indeks.
  • Peta: kunci + nilai, urutkan acak pada setiap proses.
  • String: rentang diulang per rune (titik kode), bukan per byte.
  • Saluran: mengulangi saat saluran terbuka; ditutup dengan close().