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
for init statement; expression; post statement {
execute statement
}Quando si mantiene solo la condizione di ciclo, diventa while.
for expression {
execute statement
}Questo è un ciclo infinito che non uscirà mai
for {
execute statement
}Esempio
Questo è un codice che stampa i numeri nell'intervallo [0,20]
for i := 0; i <= 20; i++ {
fmt.Println(i)
}Puoi inizializzare più variabili contemporaneamente e poi incrementarle
for i, j := 1, 2; i < 100 && j < 1000; i, j = i+1, j+1 {
fmt.Println(i, j)
}Utilizzato come while
num := 1
for num < 100 {
num *= 2
}Doppio ciclo per stampare la tabellina della moltiplicazione, questo è un caso di ciclo molto classico
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
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 = 81for range
for range può iterare più comodamente su alcune strutture dati iterabili, come array, slice, stringhe, mappe, canali. Il formato dell'istruzione è il seguente:
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.
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.
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
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 8Utilizzare le etichette per interrompere il ciclo esterno
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
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 9Utilizzare le etichette
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