Lecciones del módulo (2/5)
for: el único bucle
Go tiene una construcción de bucle único: for. Sin CÓDIGOPH1, no
do-while, no foreach (que llega en la siguiente lección con
CÓDIGOPH4). Una única palabra clave cubre todos los casos gracias a tres formularios.
Las tres formas de for
Formulario clásico de tres cláusulas
Idéntico a C/Java:
for i := 0; i < 5; i++ {
fmt.Println(i)
}i tiene un alcance limitado a for. Las tres cláusulas son opcionales (puedes
omite cualquiera de ellos) pero el ; permanece si omites uno intermedio.
formulario "mientras": solo condición
En Go, while es simplemente un for con una única expresión bool:
i := 0
for i < 5 {
fmt.Println(i)
i++
}Forma infinita
Sin cláusulas, el bucle nunca termina (a menos que break/return):
for {
if exitCondition() {
break
}
doWork()
}Es el patrón para bucles de manejo de eventos, servidores y políticas de reintento.
break, continue y etiquetas
break sale del bucle más interno, continue salta a la siguiente iteración:
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue // salta i pari
}
if i > 7 {
break // ferma il ciclo
}
fmt.Println(i) // 1 3 5 7
}Para salir de los bucles anidados hay etiquetas (pocas pero útiles):
Esterno:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i*j == 4 {
break Esterno // esce da entrambi
}
}
}No hay operador , como en C
En Go no puedes escribir for i, j := 0, 10; i < j; i, j = i+1, j-1:
la expresión de publicación no acepta asignaciones múltiples. Utilice Go
sintaxis de asignación múltiple:
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
fmt.Println(i, j)
}En cambio, esto funciona porque i, j = i+1, j-1 es un único
asignación múltiple.
Pruébalo
Imprime los números del 0 al 4 inclusive con un clásico de tres cláusulas para.
Mostrar pista
`for init; cond; post { ... }`: aquí el inicio es `i := 0`.
Solución disponible después de 3 intentos
Suma el total de todos los números del 1 al 10 inclusive usando la forma "mientras" de for.
Mostrar pista
Forma 'mientras': `for <condition> { ... }`.
Solución disponible después de 3 intentos
¿Qué forma representa un bucle infinito en Go?
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }Resumen
- Una única palabra clave
forcon tres formas: clásica, while, infinita. break/continueopcionalmente con etiqueta para bucles anidados.- Etiqueta
Name:antes defor, usado con moderación. - Sin
,como operador: utilice la asignación múltiplei, j = ..., ....