07 Loops

Published Apr 24, 2023

GoProgrammingSwitchConditions

1. Sintaxis del For B谩sico

La estructura b谩sica de un bucle for incluye tres partes: init, condition y post statement.

for init; condition; post {
    // C贸digo que se ejecutar谩 mientras la condici贸n sea verdadera
}

Un loop (o bucle) es una estructura que permite ejecutar un bloque de c贸digo repetidamente mientras se cumpla una condici贸n. En Go, la 煤nica estructura de bucle disponible es el for, que puede adoptar diferentes formas para cubrir una variedad de casos de uso.

Componentes:

  1. Init: Se ejecuta una vez al inicio del bucle (por ejemplo, inicializaci贸n de variables).
  2. Condition: Eval煤a si el bucle debe continuar. Si es false, el bucle se detiene.
  3. Post statement: Se ejecuta despu茅s de cada iteraci贸n (por ejemplo, incremento de variables).

Ejemplo:

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

2. For con M煤ltiples Variables

Puedes declarar y modificar varias variables en el for, tanto en el init como en el post statement.

Ejemplo:

for i, j := 0, 10; i < 5; i, j = i+1, j-1 {
    fmt.Println(i, j)
}

3. For sin Init Condition ni Post Statement

Las secciones init y post son opcionales. Esto hace que el for de Go sea muy flexible.

Ejemplo:

limit := 10
b := 0
for b <= limit {
    fmt.Println(b)
    b++
}

4. Bucle Infinito

Si omites la condici贸n, obtendr谩s un bucle infinito. 脷til cuando quieres un bucle que dependa de instrucciones internas como break o return.

Ejemplo:

i := 0
for {
    fmt.Println("Hola")
    if i > 5 {
        break
    }
    i++
}

5. Iterar sobre Colecciones con For-Range

El bucle for-range es una herramienta poderosa para recorrer slices, arrays, strings, maps, o canales.

Sintaxis:

for 铆ndice, valor := range colecci贸n {
    // C贸digo que utiliza 铆ndice y valor
}

Ejemplo con Slices:

OS := []string{"iOS", "Android", "Windows"}

for i, v := range OS {
    fmt.Println(i, v)
}

Ejemplo con Strings:

for pos, char := range "Hello, world!" {
    fmt.Printf("Posici贸n: %d, Car谩cter: %q\n", pos, char)
}

6. Break y Continue

  • break: Sale del bucle actual.
  • continue: Salta a la siguiente iteraci贸n del bucle.

Ejemplo:

for i := 0; i < 10; i++ {
    if i == 5 {
        break // Sale del bucle cuando i es 5
    }
    if i%2 == 0 {
        continue // Salta n煤meros pares
    }
    fmt.Println(i)
}

7. Labels con Break y Continue

Go permite usar labels para identificar bucles espec铆ficos, lo que es 煤til cuando trabajas con bucles anidados.

Break con Label:

Outerloop:
for i := 1; i <= 5; i++ {
    for j := 1; j <= 5; j++ {
        if i == 3 {
            break Outerloop // Sale del bucle Outerloop
        }
        fmt.Printf("%d * %d = %d\n", i, j, i*j)
    }
}

Continue con Label:

Outerloop:
for i := 1; i <= 5; i++ {
    for j := 1; j <= 5; j++ {
        if i == 3 {
            continue Outerloop // Salta el resto de las iteraciones del bucle externo
        }
        fmt.Printf("%d * %d = %d\n", i, j, i*j)
    }
}

8. Iterar Strings con For-Range

El for-range sobre strings devuelve 铆ndices y runas (n煤meros Unicode).

Ejemplo:

for pos, char := range "GoLang" {
    fmt.Printf("Posici贸n: %d, Car谩cter: %c\n", pos, char)
}

Si necesitas los caracteres como strings, puedes convertirlos:

for _, char := range "GoLang" {
    fmt.Println(string(char)) // Convierte runas a string
}

9. For como While

Aunque Go no tiene un bucle while, puedes emularlo f谩cilmente con un for sin init ni post.

Ejemplo:

counter := 0
for counter < 5 {
    fmt.Println(counter)
    counter++
}

10. Resumen

  • Estructura b谩sica: for init; condition; post { ... }.
  • Flexible: Puede omitir init, condition, o post.
  • For-range: Ideal para recorrer colecciones y strings.
  • Break y Continue: Controlan la ejecuci贸n dentro de bucles.
  • Labels: Facilitan el control de bucles anidados.
  • Go no tiene while, pero puedes lograr lo mismo con un for.

Con estos conceptos, puedes dominar el control de bucles en Go de manera eficiente y escribir c贸digo m谩s limpio y legible.

Elprogramadorgt - Blog 漏 2025