De forma natural, una colección de datos se recorre mediante un bucle, desde el primer elemento hasta el último. Para conseguir esto, normalmente utilizamos la función len() para obtener el tamaño o longitud de la colección, que nos sirve como límite en dicho bucle.
package main
import "fmt"
func main() {
var nombres = [5]string{"Rafael", "Eduardo",
"Nerea", "Cintia", "Clemen"}
for i := 0; i < len(nombres); i++ {
fmt.Printf("Indice: %d, Nombre: %s\n", i, nombres[i])
}
}
Este método de recorrer una colección se puede simplificar mucho mediante rangos. Un rango permite iterar o recorrer, de forma automática y secuencial, desde el inicio hasta el fin, una colección de datos.
Si usamos un rango sobre el array quedaría de la siguiente manera:
for indice, valor := range nombres {
fmt.Printf("Indice: %d, Nombre: %s\n", indice, valor)
}
El rango retorna siempre dos resultados en cada iteración: el índice (o posición) y el valor del elemento actual en curso.
Si no nos interesa (por ejemplo) el índice, podemos omitirlo mediante el operador underscore (o guión bajo, _):
for _, valor := range nombres {
fmt.Printf("Nombre: %s\n", valor)
}
Un rango puede trabajar con arrays, slices, strings y mapas. En el caso de los mapas, retornará la clave y el valor de cada elemento del mismo.
// Definicion del mapa
centros := make(map[string]string)
// Adicion de claves y valores
centros["MADE"] = "Madrid Este"
centros["MADN"] = "Madrid Norte"
centros["MOS"] = "Mostoles"
centros["POZ"] = "Pozuelo"
centros["BCN"] = "Barcelona"
// Recorrido del mapa con un rango
for clave, valor := range centros {
fmt.Printf("Clave: %s, Nombre: %s\n", clave, valor)
}
Nota: Los rangos también puede operar con canales, que es un concepto relacionado con la concurrencia.
Enlaces de interés
- Go by Example - range: https://gobyexample.com/range
- A tour of Go - range: https://tour.golang.org/moretypes/16

No hay comentarios:
Publicar un comentario