menu

Lección 2: Control de Flujo – Ciclos y Toma de Decisiones en Go (For, If/Else y Switch)

Posted by blacksecured in Go on .

En la lección anterior aprendimos a declarar variables y constantes. Ahora vamos a darle «inteligencia» a nuestro código. El control de flujo nos permite decidir qué partes del programa se ejecutan y cuántas veces deben repetirse.

En Go, el control de flujo es minimalista y muy potente.


1) El Ciclo for:

En Go, solo existe un comando para hacer ciclos: for. No existe while ni do-while, porque for puede hacerlo todo.

Ejemplo A: Estilo «While» (Solo condición)

Se usa cuando quieres que algo se repita hasta que una condición deje de cumplirse.

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

Ejemplo B: Estilo Clásico

El formato estándar de tres partes: inicialización, condición y post-iteración.

for j := 7; j <= 9; j++ {
    fmt.Println(j)
}

Ejemplo C: Ciclo Infinito y break

Si no pones ninguna condición, el ciclo se ejecutará para siempre a menos que uses un break

for {
    fmt.Println("Esto se repite una vez y sale")
    break
}

2) Condicionales if / else

Las condicionales en Go son muy limpias. Una regla de oro: no se usan paréntesis () para la condición, pero las llaves {} son siempre obligatorias.

Ejemplo Básico:

if 7%2 == 0 {
    fmt.Println("7 es par")
} else {
    fmt.Println("7 es impar")
}

Ejemplo con declaración corta:

Go permite declarar una variable que solo vivirá dentro del bloque del if. Esto es excelente para mantener el código limpio.

if num := 9; num < 0 {
    fmt.Println(num, "es negativo")
} else if num < 10 {
    fmt.Println(num, "tiene un solo dígito")
} else {
    fmt.Println(num, "es un número grande")
}

3) La Estructura switch

El switch es la mejor forma de evitar muchos if anidados cuando tienes varias opciones para una misma variable.

Ejemplo de Switch con valores:

i := 2
fmt.Print("Escribe ", i, " como ")
switch i {
case 1:
    fmt.Println("uno")
case 2:
    fmt.Println("dos")
case 3:
    fmt.Println("tres")
}

Ejemplo de Switch múltiple y por defecto:

Puedes evaluar varias opciones en un solo case y usar default para cuando ninguna coincida.

import "time"

switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
    fmt.Println("Es fin de semana 🥳")
default:
    fmt.Println("Es día de semana 💼")
}

Ejemplo de Switch sin expresión (como If/Else):

Si no le pasas una variable al switch, funciona como una cadena de condiciones lógicas muy elegante.

t := time.Now()
switch {
case t.Hour() < 12:
    fmt.Println("Es antes del mediodía")
default:
    fmt.Println("Es después del mediodía")
}

Resumen técnico para recordar:

For: Único bucle disponible. Úsalo para todo tipo de repeticiones.

If/Else: No lleva paréntesis. Permite declarar variables temporales.

Switch: No necesita la palabra break al final de cada caso; Go lo hace por ti automáticamente.

Tarea para el lector:

Crea un programa que recorra los números del 1 al 20 usando un ciclo for. Si el número es divisible entre 3, imprime «Fizz», si es divisible entre 5 imprime «Buzz», y si es divisible entre ambos imprime «FizzBuzz». ¡Es el famoso reto FizzBuzz!