Skip to content

Controllo del ciclo Go

In Go c'è un solo tipo di istruzione di ciclo: for. Go ha abbandonato l'istruzione while, l'istruzione for può essere utilizzata come while.

for

Il formato dell'istruzione è il seguente

go
for init statement; expression; post statement {
  execute statement
}

Quando si mantiene solo la condizione di ciclo, diventa while.

go
for expression {
  execute statement
}

Questo è un ciclo infinito che non uscirà mai

go
for {
  execute statement
}

Esempio

Questo è un codice che stampa i numeri nell'intervallo [0,20]

go
for i := 0; i <= 20; i++ {
    fmt.Println(i)
}

Puoi inizializzare più variabili contemporaneamente e poi incrementarle

go
for i, j := 1, 2; i < 100 && j < 1000; i, j = i+1, j+1 {
  fmt.Println(i, j)
}

Utilizzato come while

go
num := 1
for num < 100 {
    num *= 2
}

Doppio ciclo per stampare la tabellina della moltiplicazione, questo è un caso di ciclo molto classico

go
func main() {
  for i := 1; i <= 9; i++ {
    for j := 1; j <= 9; j++ {
      if i <= j {
        fmt.Printf("%d*%d = %2d  ", i, j, i*j)
      }
    }
    fmt.Println()
  }
}

L'output è il seguente

go
1*1 =  1  1*2 =  2  1*3 =  3  1*4 =  4  1*5 =  5  1*6 =  6  1*7 =  7  1*8 =  8  1*9 =  9
2*2 =  4  2*3 =  6  2*4 =  8  2*5 = 10  2*6 = 12  2*7 = 14  2*8 = 16  2*9 = 18
3*3 =  9  3*4 = 12  3*5 = 15  3*6 = 18  3*7 = 21  3*8 = 24  3*9 = 27
4*4 = 16  4*5 = 20  4*6 = 24  4*7 = 28  4*8 = 32  4*9 = 36
5*5 = 25  5*6 = 30  5*7 = 35  5*8 = 40  5*9 = 45
6*6 = 36  6*7 = 42  6*8 = 48  6*9 = 54
7*7 = 49  7*8 = 56  7*9 = 63
8*8 = 64  8*9 = 72
9*9 = 81

for range

for range può iterare più comodamente su alcune strutture dati iterabili, come array, slice, stringhe, mappe, canali. Il formato dell'istruzione è il seguente:

go
for index, value := range iterable {
  // body
}

index è l'indice della struttura dati iterabile, value è il valore corrispondente all'indice. Ad esempio, utilizzare for range per iterare su una stringa.

go
func main() {
   sequence := "hello world"
   for index, value := range sequence {
      fmt.Println(index, value)
   }
}

for range può anche iterare su un valore intero, letterali, costanti, variabili sono tutti validi.

go
for i := range 10 {
    fmt.Println(i)
}

n := 10
for i := range n {
    fmt.Println(i)
}

const n = 10
for i := range n {
  fmt.Println(i)
}

Per ogni tipo di struttura dati, l'implementazione di for range è diversa, verrà spiegato in seguito. Puoi visitare Go - for statement per maggiori dettagli.

break

La parola chiave break terminerà il ciclo for più interno. Combinata con le etichette può raggiungere l'effetto di terminare il ciclo esterno. Ecco un esempio: questo è un doppio ciclo

go
func main() {
  for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
      if i <= j {
        break
      }
      fmt.Println(i, j)
    }
  }
}

Output

1 0
2 0
2 1
3 0
3 1
3 2
...
9 6
9 7
9 8

Utilizzare le etichette per interrompere il ciclo esterno

go
func main() {
Outer:
  for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
      if i <= j {
        break Outer
      }
      fmt.Println(i, j)
    }
  }
}

Output

continue

La parola chiave continue salterà l'iterazione corrente del ciclo più interno ed entrerà direttamente nella prossima iterazione. Combinata con le etichette può raggiungere l'effetto di saltare il ciclo esterno. Ecco un esempio

go
func main() {
  for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
      if i > j {
        continue
      }
      fmt.Println(i, j)
    }
  }
}

Output

0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
...
7 7
7 8
7 9
8 8
8 9
9 9

Utilizzare le etichette

go
func main() {
Out:
  for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
      if i > j {
        continue Out
      }
            fmt.Println(i, j)
    }
  }
}

Output

0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9

Golang by www.golangdev.cn edit