Iterare sulle collezioni con range
Utilizzare range su slice, map e stringhe
Iterare sulle collezioni con range è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Che cos'è range
range è una forma speciale del ciclo for che itera su array, slice, map, stringhe e canali. A ogni iterazione restituisce un indice (o una chiave) e un valore.
range su una slice
Restituisce l'indice e una copia dell'elemento:
package main
import "fmt"
func main() {
fruits := []string{"apple", "banana", "cherry"}
for i, fruit := range fruits {
fmt.Printf("%d: %s\n", i, fruit)
}
}range su un array
Funziona come per le slice. Gli elementi dell'array vengono copiati a ogni iterazione:
package main
import "fmt"
func main() {
nums := [3]int{10, 20, 30}
for _, v := range nums {
fmt.Println(v)
}
}range su una map
Restituisce la chiave e il valore in ordine casuale:
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 su una stringa
Itera sui code point Unicode (rune), non sui byte. L'indice è la posizione in byte dell'inizio del rune:
package main
import "fmt"
func main() {
for i, r := range "héllo" {
fmt.Printf("%d: %c\n", i, r)
}
}Ignorare l'indice
Utilizzi _ per ignorare l'indice quando servono solo i valori:
package main
import "fmt"
func main() {
total := 0
for _, v := range []int{1, 2, 3, 4, 5} {
total += v
}
fmt.Println(total) // 15
}range con il solo indice
Omettendo il valore si ottiene solo l'indice. È utile per le modifiche in-place:
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 su un channel
range legge da un channel finché non viene chiuso:
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)
}
}La trappola della variabile del ciclo
La variabile di range viene riutilizzata a ogni iterazione: catturarne l'indirizzo in una goroutine o in una closure è un errore classico:
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
}Modificare gli elementi di una slice
Il valore restituito da range è una copia. Per modificarlo, utilizzi l'indice:
package main
import "fmt"
func main() {
s := []int{10, 20, 30}
for i := range s {
s[i]++
}
fmt.Println(s) // [11 21 31]
}Verifica rapida
Quando si esegue il range su una stringa, di quale tipo è la variabile del valore?
Riepilogo: range
Punti chiave:
rangefunziona su slice, array, map, stringhe e channel- Restituisce (indice, valore): entrambi possono essere ignorati con
_ - I valori restituiti da range sono copie: per modificarli, utilizzi l'indice
- Le stringhe producono rune, non byte
- L'ordine di iterazione di una map è casuale
Traccia per l'esercizio
Utilizzi range per calcolare la somma di tutti i valori di una map[string]int e stampi sia ogni elemento sia il totale.
Domande Frequenti
La lezione «Iterare sulle collezioni con range» è gratuita?
Sì — il testo completo di «Iterare sulle collezioni con range» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Iterare sulle collezioni con range»?
Utilizzare range su slice, map e stringhe Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Iterare sulle collezioni con range»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Array: collezioni a lunghezza fissa
- Slice: liste dinamiche
- Map: archivi chiave-valore
- Iterare sulle collezioni con range