Range
#
// I _range_ statement permettono di iterare sugli
// elementi di una varietà di strutture di dati,
// similmente ai foreach di altri linguaggi. Vediamo
// come usare `range` con alcune delle strutture di
// dati che abbiamo già visto.
package main
import "fmt"
func main() {
// Di seguito utilizziamo un `range` per sommare i
// numeri di uno slice. (Con gli array viene fatto
// allo stesso modo).
nums := []int{2, 3, 4}
sum := 0
for _, num := range nums {
sum += num
}
fmt.Println("somma:", sum)
// `range` sugli array e sugli slice restituisce sia l'indice
// sia il valore di ognuno degli elementi. Prima non
// avevamo bisogno di utilizzare l'indice, quindi
// l'avevamo ignorato utilizzando il blank identifier
// `_`. Qualche volta potremmo avere anche solo bisogno
// dell'indice, e ignorare il suo valore.
for i, num := range nums {
if num == 3 {
fmt.Println("indice:", i)
}
}
// `range` su una map itera sulle coppie
// chiave-valore.
kvs := map[string]string{"a": "alice", "b": "bob"}
for k, v := range kvs {
fmt.Printf("%s -> %s\n", k, v)
}
// `range` sulle stringhe itera sui singoli codici Unicode
// della stringa. Il primo valore rappresenta l'indice posizionale,
// il secondo valore rappresenta la `rune` Unicode in sè per sè.
for i, c := range "go" {
fmt.Println(i, c)
}
}
$ go run range.go
somma: 9
indice: 1
a -> alice
b -> bob
0 103
1 111