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