Go: il costrutto for range

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.

Torna su