Lecții din modul (3/5)
pentru...gamă
for ... range este modalitatea idiomatică de a itera colecții:
felii, matrice, hărți, șiruri și canale. Sintaxa se modifică ușor
în funcție de colecție, dar modelul de bază este întotdeauna același:
for key, value := range coll { ... }.
Gamă pe felii și matrice
Returnează index și copie a valorii:
nums := []int{10, 20, 30}
for i, v := range nums {
fmt.Println(i, v)
}
// 0 10
// 1 20
// 2 30Adesea, unul dintre cele două este suficient:
// solo indice
for i := range nums { _ = i }
// solo valore (ignora indice con _)
for _, v := range nums { _ = v }Raza de acțiune pe o hartă
Returnează cheie și valoare:
prices := map[string]int{"pane": 2, "latte": 3, "vino": 8}
for k, v := range prices {
fmt.Println(k, v)
}Interval pe un șir: rune, nu octeți
for i, r := range s repetă pe punct de cod Unicode (rună), nu pe
octet. Indicele i este decalajul octet al începutului runei.
for i, r := range "èé" {
fmt.Printf("%d %c (%U)\n", i, r, r)
}
// 0 è (U+00E8)
// 2 é (U+00E9)Pentru a itera pe octet, utilizați indexarea clasică:
s := "ciao"
for i := 0; i < len(s); i++ {
fmt.Println(s[i]) // byte (uint8)
}Raza de acțiune pe un canal
Iterează până când canalul este închis:
ch := make(chan int)
go func() {
for i := 0; i < 3; i++ { ch <- i }
close(ch)
}()
for v := range ch {
fmt.Println(v)
}Vom săpă mai adânc în modulul Concurență.
Încearcă
Tipăriți indexul și valoarea fiecărui element de numere folosind for-range.
Soluție disponibilă după 3 încercări
Însumați în total toate valorile numerelor ignorând indexul.
Afișează indiciu
Folosiți `_` pentru a renunța la index.
Soluție disponibilă după 3 încercări
Ce reprezintă prima variabilă din `for k, v := range m` când m este o hartă?
m := map[string]int{"a": 1, "b": 2}
for k, v := range m { fmt.Println(k, v) }Recapitulare
for k, v := range collcu domeniul de aplicare clar: aruncați cu_ceea ce nu utilizați.- Slice/matrice: index + COPIE a valorii. A muta, indexează.
- Hartă: cheie + valoare, ordine randomizat la fiecare cursă.
- Șir: intervalul iterează pe rună (punct de cod), nu pe octet.
- Canal: iterează în timp ce canalul este deschis; închis cu
close().