Lección 2: Control de Flujo – Ciclos y Toma de Decisiones en Go (For, If/Else y Switch)
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!
