Go by Example: Range

range itera sobre elementos en una variedad de estructuras de datos. Veamos cómo usar range con algunas de las estructuras de datos que ya hemos aprendido.

package main
import "fmt"
func main() {

Aquí usamos range para sumar los números en un segmento. Los arreglos funcionan de esta manera también.

    nums := []int{2, 3, 4}
    sum := 0
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)

range en arreglos y segmentos proporciona tanto el índice como el valor de cada entrada. Arriba no necesitábamos el índice, así que lo ignoramos con el identificador en blanco _. A veces, de hecho, queremos los índices.

    for i, num := range nums {
        if num == 3 {
            fmt.Println("index:", i)
        }
    }

range en map itera sobre pares de clave/valor (key/value).

    kvs := map[string]string{"a": "apple", "b": "banana"}
    for k, v := range kvs {
        fmt.Printf("%s -> %s\n", k, v)
    }

range también puede iterar solo sobre las claves de un map.

    for k := range kvs {
        fmt.Println("key:", k)
    }

range en cadenas itera sobre puntos de código Unicode. El primer valor es el índice de byte inicial del rune y el segundo es el rune en sí. Vea Cadenas y Runas para más detalles.

    for i, c := range "go" {
        fmt.Println(i, c)
    }
}
$ go run range.go
sum: 9
index: 1
a -> apple
b -> banana
key: a
key: b
0 103
1 111

Siguiente ejemplo: Functions.