Introducción
Siempre vamos a necesitar recorrer arreglos o listas en Go. Al menos yo conozco 2 maneras de hacerlo y hoy vengo a explicarlas.
Recorrer un arreglo con una variable y un ciclo for
La forma más tradicional y antigua es declarar una variable en 0. Luego, hacer un ciclo for e ir incrementando esa variable de uno en uno hasta llegar a la longitud del arreglo.
Si queremos recorrer un arreglo o vector (por ejemplo, de números enteros) e imprimir sus valores el código de ejemplo sería el siguiente:
package main
import "fmt"
func main() {
numeros := [...]int {18, 28, 21, 96, 97}
for i := len(numeros) - 1; i >= 0; i-- {
fmt.Println(numeros[i])
}
}
Eso lo recorre de arriba hacia abajo, para “optimizar” el ciclo y no llamar muchas veces a len. Al ejecutar, tenemos:
Pero si a queremos recorrerlo de abajo hacia arriba tenemos dos opciones… almacenar la longitud en una variable, o llamar a la función en cada iteración.
Almacenar longitud para recorrer de abajo hacia arriba
El código quedaría así:
package main
import "fmt"
func main() {
numeros := [...]int {18, 28, 21, 96, 97}
longitud := len(numeros)
for i := 0; i < longitud; i++ {
fmt.Println(numeros[i])
}
}
Y su ejecución sería la siguiente:
Llamar a len en cada iteración
Ahora quedaría así:
package main
import "fmt"
func main() {
numeros := [...]int {18, 28, 21, 96, 97}
for i := 0; i < len(numeros); i++ {
fmt.Println(numeros[i])
}
}
Y su ejecución sería casi la misma que arriba, así:
Recorrer un arreglo con range
Este es el método preferido y elegante. Si queremos recorrer un arreglo, utilizamos range. Así, podemos acceder al índice y al valor por separado.
Por ejemplo, para ver el índice y valor de un arreglo usamos esto:
package main
import "fmt"
func main() {
numeros := [...]int {18, 28, 21, 96, 97}
for indice, valor := range numeros {
fmt.Printf("Estamos en el índice %d, y su valor es %d\n", indice, valor)
}
}
La salida es la siguiente:
Si sólo queremos el índice…
Código de ejemplo:
package main
import "fmt"
func main() {
numeros := [...]int {18, 28, 21, 96, 97}
for indice, _ := range numeros {
fmt.Printf("Estamos en el índice %d\n", indice)
}
}
Lo que da como resultado esto:
Y si sólo queremos el valor…
Código fuente de ejemplo:
package main
import "fmt"
func main() {
numeros := [...]int {18, 28, 21, 96, 97}
for _, valor := range numeros {
fmt.Printf("Estamos en el valor %d\n", valor)
}
}
Para terminar, esta es la salida:
Conclusión y notas
Sólo recorrimos arreglos de números, pero también podemos recorrer arreglos de cualquier tipo, sobre todo utilizando range.