Introducción
A diferencia de otros idiomas, Go solo tiene la palabra clave "for" para las declaraciones de bucle. Sin embargo, es eficiente y flexible. Aprendamos sobre el bucle for en Go.
Puntos de conocimiento:
- Bucle for
- Bucle for range
💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí
A diferencia de otros idiomas, Go solo tiene la palabra clave "for" para las declaraciones de bucle. Sin embargo, es eficiente y flexible. Aprendamos sobre el bucle for en Go.
Puntos de conocimiento:
En la sección anterior sobre estructuras de datos básicas, aprendimos que una cadena es una colección de caracteres. Por lo tanto, podemos usar el índice para recuperar caracteres específicos en una cadena. Creemos un archivo string.go
y escribamos el siguiente código en él:
cd ~/project
touch string.go
package main
import "fmt"
func main() {
s := "labex"
// Acceder a cada carácter en la cadena usando índices
fmt.Println(s[0], s[1], s[2], s[3], s[4])
// Imprimir caracteres
fmt.Printf("%c %c %c %c %c\n", s[0], s[1], s[2], s[3], s[4])
}
Ejecuta el programa:
go run string.go
La salida es la siguiente:
108 97 98 101 120
l a b e x
En este programa, declaramos una variable de cadena para almacenar "labex" y usamos el índice para acceder a cada carácter en la cadena. Al imprimir, encontramos que el programa muestra números en lugar de caracteres reales.
Al comparar la siguiente tabla ASCII, podemos ver que los números corresponden a los caracteres reales. Por ejemplo, en la tabla ASCII, "108" corresponde a "l".
Esto se debe a que los caracteres en realidad almacenan la codificación numérica de cada carácter bajo la codificación "UTF-8". "UTF-8" es compatible con "ASCII", por lo que la posición del carácter "l" en realidad almacena la codificación numérica "108".
Si queremos mostrar caracteres, podemos usar la función fmt.Printf
con la secuencia de escape %c
para mostrarlos como caracteres. Esto se demuestra en la segunda línea del código. Convertirá la codificación numérica en caracteres y luego los mostrará.
Para acceder a cada carácter en la cadena en el archivo string.go
, necesitamos declarar un índice cada vez. Esto será problemático cuando se traten cientos o miles de datos. En este caso, podemos usar un bucle for
para operar.
Un bucle ejecuta un programa basado en una condición. Echemos un vistazo a la sintaxis de la declaración de bucle for
:
for initialization; condition; post {
// code block
}
La declaración de inicialización inicializa una variable. La condición debe devolver un valor booleano. La declaración post modifica el valor de la variable en cada iteración del bucle. Veamos un ejemplo específico.
Crea un archivo for.go
en el directorio ~/project
y escribe el siguiente contenido:
cd ~/project
touch for.go
package main
import "fmt"
func main() {
// Output numbers from 0 to 9
for i := 0; i < 10; i++ {
fmt.Println(i)
}
}
Ejecuta el programa:
go run for.go
La salida es la siguiente:
0
1
2
3
4
5
6
7
8
9
En este programa, primero inicializamos una variable temporal i
a 0, y en cada iteración del bucle, el valor de i
se incrementará en 1. La condición es que el bucle continuará si el valor de i
es menor que 10, lo que significa que el programa mostrará los números del 0 al 9.
Nota: En un bucle for
, las declaraciones de inicialización, condición y post son opcionales. Esto significa que incluso sin estas declaraciones, el bucle for
funcionará normalmente.
Si solo está presente la declaración de condición, el bucle for
funciona de manera similar a un bucle "while" en otros idiomas.
El siguiente código utiliza solo la declaración de condición para lograr el mismo resultado que el programa anterior:
package main
import "fmt"
func main() {
i := 0
for i < 10 {
fmt.Println(i)
i++
}
}
Puedes ver que cuando solo está presente la declaración de condición, el punto y coma ;
utilizado para separar las declaraciones se puede omitir.
Ahora que entendemos la sintaxis del bucle for, reescribamos el primer programa string.go
utilizando un bucle for.
package main
import "fmt"
func main() {
s := "labex"
for i := 0; i < len(s); i++ {
fmt.Printf("%d %c\n", int(s[i]), s[i])
}
}
Ejecuta el programa:
go run string.go
La salida es la siguiente:
108 l
97 a
98 b
101 e
120 x
Hagamos un quiz para consolidar nuestra comprensión del bucle for.
Crea un archivo for2.go
. La tarea es mostrar cada carácter en orden inverso de la cadena "labex".
Salida esperada:
x
e
b
a
l
Requisitos:
for2.go
debe colocarse en el directorio ~/project
.Pista: El índice comienza desde 0.
En la sección anterior, mencionamos que las tres declaraciones en un bucle for son opcionales. ¿Qué pasaría si ninguna de ellas se declarara? Hagamos una prueba.
Escribe el siguiente código en el archivo for.go
:
package main
import "fmt"
func main() {
for {
fmt.Printf("1")
}
}
Ejecuta el programa:
go run for.go
Podemos ver que si la condición en el bucle for no se declara, se asume que la condición es true
y el bucle se ejecutará indefinidamente.
Consejo: Utiliza Ctrl+C
para terminar el programa.
Si queremos salir del bucle en una condición específica sin declarar una declaración de condición o no podemos escribir una declaración de condición, podemos usar la palabra clave "break". Fuerza la salida inmediata del bucle que la contiene.
Actualiza el archivo for.go
con el siguiente código, que utiliza la palabra clave "break" para mostrar 23 "1":
package main
import "fmt"
func main() {
i := 0
for {
// Increment the value of i by 1 in each loop iteration
i++
fmt.Printf("1")
// Exit the loop when the value of i is 23
if i == 23 {
break
}
}
}
La palabra clave "break" no solo se puede usar en un bucle for sin declaración de condición, sino que también se puede usar en un bucle for con una declaración de condición. Cuando se cumple la condición de "break", omitirá la declaración de condición y saldrá del bucle.
Además de la palabra clave "break", que fuerza una salida inmediata del bucle, también existe la palabra clave "continue", que te permite omitir el resto de la iteración actual del bucle y comenzar la siguiente iteración.
El uso de la palabra clave "continue" es similar al de la palabra clave "break", pero sus funciones son diferentes.
Actualicemos el archivo for.go
para omitir los números 2 y 8:
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 2 || i == 8 {
continue
}
fmt.Println(i)
}
}
Ejecuta el programa:
go run for.go
La salida es la siguiente:
0
1
3
4
5
6
7
9
En este programa, agregamos una declaración condicional en el bloque de código del bucle for. Si el valor actual de la variable del bucle es 2 o 8, omitirá el resto del código y comenzará la siguiente iteración del bucle. Por lo tanto, la salida no incluye los números 2 y 8.
En este laboratorio, aprendimos sobre el bucle for
. Repasemos:
for
son opcionales.break
se puede utilizar para salir del bucle actual.continue
se puede utilizar para omitir la iteración actual y comenzar la siguiente.