0Pricing
Go Academy · Lección

Iteración de colecciones con range

Uso de range con slices, maps y strings

Iteración de colecciones con range es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

¿Qué es range?

range es una forma especial del bucle for que itera sobre arrays, slices, mapas, cadenas y canales. Devuelve un índice (o una clave) y un valor en cada iteración.

range sobre un slice

Devuelve el índice y una copia del elemento:

package main
import "fmt"

func main() {
    fruits := []string{"apple", "banana", "cherry"}
    for i, fruit := range fruits {
        fmt.Printf("%d: %s\n", i, fruit)
    }
}

range sobre un array

Funciona igual que con los slices. Los elementos del array se copian en cada iteración:

package main
import "fmt"

func main() {
    nums := [3]int{10, 20, 30}
    for _, v := range nums {
        fmt.Println(v)
    }
}

range sobre un map

Devuelve la clave y el valor en un orden aleatorio:

package main
import "fmt"

func main() {
    capitals := map[string]string{
        "France": "Paris",
        "Japan":  "Tokyo",
    }
    for country, city := range capitals {
        fmt.Printf("%s -> %s\n", country, city)
    }
}

range sobre un string

Itera sobre puntos de código Unicode (rune), no sobre bytes. El índice es la posición en bytes donde comienza el rune:

package main
import "fmt"

func main() {
    for i, r := range "héllo" {
        fmt.Printf("%d: %c\n", i, r)
    }
}

Descartar el índice

Use _ para ignorar el índice cuando solo necesite los valores:

package main
import "fmt"

func main() {
    total := 0
    for _, v := range []int{1, 2, 3, 4, 5} {
        total += v
    }
    fmt.Println(total) // 15
}

range solo con índice

Omitir el valor proporciona únicamente el índice. Resulta útil para realizar modificaciones in situ:

package main
import "fmt"

func main() {
    s := []int{1, 2, 3}
    for i := range s {
        s[i] *= 2
    }
    fmt.Println(s) // [2 4 6]
}

range sobre un canal

range lee de un canal hasta que este se cierra:

package main
import "fmt"

func main() {
    ch := make(chan int, 3)
    ch <- 1; ch <- 2; ch <- 3
    close(ch)
    for v := range ch {
        fmt.Println(v)
    }
}

La trampa de la variable del bucle

La variable de range se reutiliza en cada iteración; capturar su dirección en una goroutine o closure es un error clásico:

package main
import "fmt"

func main() {
    nums := []int{1, 2, 3}
    funcs := make([]func(), 3)
    for i, v := range nums {
        v := v // shadow with a copy
        funcs[i] = func() { fmt.Println(v) }
    }
    for _, f := range funcs { f() } // 1 2 3
}

Modificar elementos de un slice

El valor de range es una copia. Para modificar el elemento, use el índice:

package main
import "fmt"

func main() {
    s := []int{10, 20, 30}
    for i := range s {
        s[i]++
    }
    fmt.Println(s) // [11 21 31]
}

Comprobación rápida

Al recorrer un string, ¿de qué tipo es la variable de valor?

Recapitulación: range

Conclusiones principales:

  • range funciona con slices, arrays, maps, strings y canales
  • Devuelve (índice, valor); cualquiera de los dos puede descartarse con _
  • Los valores de range son copias; modifique los elementos mediante el índice
  • Los strings producen runes, no bytes
  • El orden de iteración de los maps es aleatorio

Ejercicio práctico

Use range para calcular la suma de todos los valores de un map[string]int y mostrar cada entrada junto con el total.

Preguntas frecuentes

¿La lección «Iteración de colecciones con range» es gratis?

Sí — el texto completo de «Iteración de colecciones con range» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Iteración de colecciones con range»?

Uso de range con slices, maps y strings Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Iteración de colecciones con range»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Arrays: colecciones de longitud fija
  2. Slices: listas dinámicas
  3. Maps: almacenes clave-valor
  4. Iteración de colecciones con range
← Volver a Go Academy