Il costrutto "for range" è una caratteristica potente del linguaggio di programmazione Go (Golang) che consente di iterare attraverso gli elementi di una collezione come un array, una slice, una mappa o una stringa. È una sintassi semplice ed elegante che facilita l'iterazione e l'accesso agli elementi senza la necessità di utilizzare un indice esplicito.
La sintassi di base del costrutto "for range" in Go è la seguente:
for index, value := range collection {
// ...
}
La parola chiave for
è seguita da due variabili, index
e value
, separate da un operatore di assegnazione :
. La variabile index
è l'indice dell'elemento corrente nella collezione, mentre la variabile value
è il valore dell'elemento corrente. La parola chiave range
indica che il costrutto "for range" viene utilizzato.
La parola chiave range
può essere utilizzata anche senza la variabile index
se non è necessario utilizzare l'indice dell'elemento corrente. In questo caso, la sintassi è la seguente:
for _, value := range collection {
// ...
}
La variabile _
è un identificatore anonimo che viene utilizzato per ignorare il valore dell'indice.
Ecco alcuni esempi che illustrano l'utilizzo del costrutto "for range" con diversi tipi di collezioni:
Iterare attraverso un array
Un array è una collezione di elementi dello stesso tipo. La dimensione di un array è fissa e non può essere modificata dopo la sua creazione. La sintassi per creare un array in Go è la seguente:
numbers := [5]int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
Il codice sopra crea un array di 5 elementi e itera attraverso di esso utilizzando il costrutto "for range".
Iterare attraverso una slice
Una slice è una struttura dati dinamica che può essere utilizzata per memorizzare una collezione di elementi dello stesso tipo. La dimensione di una slice è dinamica e può essere modificata dopo la sua creazione. La sintassi per creare una slice in Go è la seguente:
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
Il codice sopra crea una slice di 5 elementi e itera attraverso di essa utilizzando il costrutto "for range".
Iterare attraverso una mappa
Una mappa è una struttura dati dinamica che può essere utilizzata per memorizzare una collezione di coppie chiave-valore. La dimensione di una mappa è dinamica e può essere modificata dopo la sua creazione. La sintassi per creare una mappa in Go è la seguente:
numbers := map[string]int{
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
}
for key, value := range numbers {
fmt.Printf("Key: %s, Value: %d\n", key, value)
}
Il codice sopra crea una mappa di 5 coppie chiave-valore e itera attraverso di essa utilizzando il costrutto "for range".
Iterare attraverso una stringa
Una stringa è una sequenza di caratteri. La dimensione di una stringa è dinamica e può essere modificata dopo la sua creazione. La sintassi per creare una stringa in Go è la seguente:
text := "Hello, World!"
for index, value := range text {
fmt.Printf("Index: %d, Value: %c\n", index, value)
}
In conclusione, il costrutto "for range" è uno strumento molto utile in Go per iterare attraverso gli elementi di una collezione in modo semplice ed efficiente. La sua sintassi intuitiva rende il codice più leggibile e riduce la probabilità di errori legati all'indice. È importante sottolineare che il costrutto "for range" crea una copia del valore dell'elemento corrente, quindi se si desidera modificare l'elemento originale all'interno del ciclo, è necessario utilizzare un puntatore all'elemento stesso.