Bucles for en Go

/img/posts/golang-flow-control-for.webp

Introducción

El control de flujo en Go se apoya en tres pilares fundamentales: if, switch y for. Los dos primeros permiten tomar decisiones. El tercero introduce los bucles de repetición.

A diferencia de otros lenguajes, Go prescinde de while, do-while y foreach. En su lugar, concentra toda la semántica de iteración en una única construcción: el bucle for. Esta elección no es accidental: simplifica el lenguaje, elimina duplicidades sintácticas y favorece un estilo de programación explícito, predecible y fácil de razonar.

En este artículo aprenderás cómo funciona el for en todas sus variantes, cómo interactúa con el ámbito, cómo se controla su ejecución y cómo se utiliza en situaciones reales.

Idea fundamental

Aunque tiene distintas formas, un bucle for siempre expresa 4 elementos conceptuales:

  • Un estado inicial
  • Una condición de continuidad
  • Un bloque de código que se repite
  • Un punto claro de salida

Cada iteración ejecuta el bloque de código exactamente una vez. El ciclo termina cuando la condición deja de cumplirse o cuando se interrumpe explícitamente.

Forma clásica del for

Es la forma más conocida del bucle for, definida por esta estructura:

for inicialización; condición; post {
    // bloque repetido
}

Cada componente tiene un propósito claro:

  • Inicialización: se ejecuta una sola vez, al entrar en el bucle.
  • Condición: expresión booleana evaluada antes de cada iteración.
  • Post: se evalúa al final de cada iteración, antes de volver a evaluar la condición.

Ejemplo:

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

Salida:

0
1
2

Aquí:

  • Se declara la variable i y se inicializa a valor 0.
  • Se evalúa la condición i < 3.
  • Si la condición es verdadera, se ejecuta el bloque.
  • Se ejecuta i++.
  • Se vuelve a evaluar la condición i < 3.
  • Cuando la condición es falsa, el bucle finaliza.

Bloques y ámbito en el for

Al igual que if y switch, el for introduce un nuevo bloque de instrucciones.

Las variables declaradas en la inicialización solo existen dentro del bloque del bucle for. No permanecen fuera del bloque. Esto favorece el principio de ámbito mínimo: las variables se usan donde se necesitan, y desaparecen cuando dejan de ser relevantes.

Ejemplo:

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

// i ya no existe aquí

Aquí:

  • La variable i solo existe dentro del bloque de instrucciones.
  • No es accesible fuera del bloque.

El for como while

En Go, la inicialización y el post son opcionales. Si se omiten, el for se comporta como un while tradicional:

n := 3

for n > 0 {
    fmt.Println(n)
    n--
}

Salida:

3
2
1

Aquí:

  • La condición es obligatoria y se evalúa antes de cada iteración.
  • No hay inicialización ni post.
  • El control del estado ocurre dentro del bloque.

Este patrón se utiliza con frecuencia en Go.

El bucle infinito

Si se omite también la condición, el for se convierte en un bucle infinito:

for {
    fmt.Println("Esto se repite indefinidamente")
}

Aquí no existe condición de terminación implícita. Debes interrumpir el bucle de forma explícita usando break y continue.

Control explícito del bucle

Dentro del bloque de un for pueden usarse dos instrucciones para controlar la ejecución:

  • break
  • continue

Ambas hacen explícito el flujo de ejecución.

break

Finaliza el bucle inmediatamente:

for i := 0; i < 10; i++ {
    if i == 3 {
        break
    }
    fmt.Println(i)
}

Salida:

0
1
2

continue

Salta a la siguiente iteración:

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

Salida:

0
1
3
4

Comparación conceptual con otros lenguajes

En muchos lenguajes existen múltiples bucles:

  • for
  • while
  • do-while
  • foreach

Go los sintetiza todos estos bucles en un único mecanismo:

  • La estructura es siempre la misma, for.
  • El comportamiento varía únicamente por omisión o presencia de sus partes.
  • Cambia la forma, no el concepto.
  • El lector asimila más rápido el modelo mental.

Esto reduce ambigüedad y mejora la legibilidad del código.

Idea clave

El bucle for en Go no es una estructura “flexible” por accidente, sino por diseño:

  • Una sola palabra clave
  • Varias formas explícitas
  • Sin comportamiento implícito
  • Totalmente consistente con bloques y ámbito

Resumen mental

  • Go tiene un único bucle: for.
  • La condición siempre es booleana.
  • La inicialización y el post son opcionales.
  • Sin condición tenemos un bucle infinito.
  • El bucle introduce un nuevo ámbito.
  • break y continue permiten controlar la ejecución.
  • No hay atajos ni formas ocultas.

Conclusión

El bucle for en Go condensa en una sola construcción todos los patrones de iteración esenciales. No es minimalista por escasez, sino por diseño: una sintaxis uniforme, una interacción limpia con el ámbito y un comportamiento explícito que elimina ambigüedades.

Con esta base ya dominas la mecánica del for en su forma pura: desde la inicialización controlada hasta el bucle infinito, pasando por el control preciso mediante break y continue. Has aprendido no solo cómo funciona, sino por qué funciona así. Esta comprensión te permitirá razonar sobre el flujo de ejecución con confianza.

El siguiente paso natural es explorar range, la forma idiomática de Go para recorrer colecciones. Pero antes necesitas conocer qué son los arrays, los slices y las strings, y cómo almacenan los datos que posteriormente iteraremos. Sin entender esas estructuras, range sería una herramienta sin contexto. Una vez las entiendas, range se convertirá en tu aliado diario.

Si te ha servido lo que has leído y quieres profundizar más, resolver alguna inquietud o charlar sobre Go con gente que está en el mismo camino que tú, únete al canal de Telegram. Somos una pequeña comunidad de entusiastas del desarrollo de software. En el canal intercambiamos ideas, comentamos proyectos, buscamos soluciones juntos y aprendemos unos de otros. El acceso es libre y totalmente gratuito.

¡Nos vemos en el próximo artículo!

Pulso la tecla ESC:wq!