Bucle for en Go

Go 语言循环语句Sentencias de bucle 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

package main

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

package main

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

package main

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

package main
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

package main
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.000000

Go 语言循环语句Sentencias de bucle en Go

Otras extensiones