Bucle for en Go
El bucle for es una estructura de control de bucle que puede ejecutar un bucle un número especificado de veces.
Sintaxis
El bucle for en Go tiene 3 formas, solo una de ellas usa punto y coma.
Igual que el for de C:
for init; condition; post { }
Igual que el while de C:
for condition { }
Igual que el for(;;) de C:
for { }
- init: normalmente una expresión de asignación, asigna el valor inicial a la variable de control;
- condition: expresión relacional o lógica, condición de control del bucle;
- post: normalmente una expresión de asignación, incrementa o decrementa la variable de control.
El proceso de ejecución de la sentencia for es el siguiente:
1. Primero se asigna el valor inicial a la expresión 1;
2. Evaluar si la expresión de asignación init cumple la condición dada; si su valor es verdadero y cumple la condición del bucle, se ejecutan las sentencias del cuerpo del bucle, luego se ejecuta post, se entra en la segunda iteración y se vuelve a evaluar condition; de lo contrario, si el valor de condition es falso y no cumple la condición, se termina el bucle for y se ejecutan las sentencias fuera del bucle.
El formato range del bucle for puede iterar sobre slices, maps, arrays, cadenas, etc. El formato es el siguiente:
for key, value := range oldMap {
newMap[key] = value
}
En el código anterior, key y value se pueden omitir.
Si solo se quiere leer key, el formato es el siguiente:
for key := range oldMap
O así:
for key, _ := range oldMap
Si solo se quiere leer value, el formato es el siguiente:
for _, value := range oldMap
El diagrama de flujo de la sintaxis de la sentencia for se muestra a continuación:

Ejemplo
Calcular la suma de los números del 1 al 10:
Ejemplo
import "fmt"
func main() {
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
}
El resultado de salida es:
55
Los parámetros init y post son opcionales, podemos omitirlos directamente, similar a la sentencia While.
El siguiente ejemplo calcula el valor de sum después de sumarse a sí misma mientras sum sea menor que 10:
Ejemplo
import "fmt"
func main() {
sum := 1
for ; sum <= 10; {
sum += sum
}
fmt.Println(sum)
// También se puede escribir así, más similar a la forma de la sentencia While
for sum <= 10{
sum += sum
}
fmt.Println(sum)
}
El resultado de salida es:
16 16
Bucle infinito:
Ejemplo
import "fmt"
func main() {
sum := 0
for {
sum++ // Bucle infinito
}
fmt.Println(sum) // No se puede generar salida
}
Para detener el bucle infinito, puedes presionar en la ventana de comandosctrl-c 。
Bucle For-each range
Este formato de bucle puede iterar y generar elementos de cadenas, arrays, slices, etc.
Ejemplo
import "fmt"
func main() {
strings := []string{"google", "ejemplo"}
for i, s := range strings {
fmt.Println(i, s)
}
numbers := [6]int{1, 2, 3, 5}
for i,x:= range numbers {
fmt.Printf("El valor de x en la posición %d = %d\n", i,x)
}
}
El resultado de salida del ejemplo anterior es:
0 google 1 ejemplo 第 0 位 x 的值 = 1 第 1 位 x 的值 = 2 第 2 位 x 的值 = 3 第 3 位 x 的值 = 5 第 4 位 x 的值 = 0 第 5 位 x 的值 = 0
El formato range del bucle for puede omitir key y value, como en el siguiente ejemplo:
Ejemplo
import "fmt"
func main() {
map1 := make(map[int]float32)
map1[1] = 1.0
map1[2] = 2.0
map1[3] = 3.0
map1[4] = 4.0
// Leer key y value
for key, value := range map1 {
fmt.Printf("key is: %d - value is: %f\n", key, value)
}
// Leer key
for key := range map1 {
fmt.Printf("key is: %d\n", key)
}
// Leer value
for _, value := range map1 {
fmt.Printf("value is: %f\n", value)
}
}
El resultado de salida del ejemplo anterior es:
key is: 4 - value is: 4.000000 key is: 1 - value is: 1.000000 key is: 2 - value is: 2.000000 key is: 3 - value is: 3.000000 key is: 1 key is: 2 key is: 3 key is: 4 value is: 1.000000 value is: 2.000000 value is: 3.000000 value is: 4.000000Otras extensiones
Sentencias de bucle en Go