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
iy se inicializa a valor0. - 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
isolo 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.
breakycontinuepermiten 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!
Use the share button below if you liked it.
There's not much you can do without a CPU.