九.golang的循环语句
for 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环。
for initialisation; condition; post { }
初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 true ,则 {}
这三个组成部分,即初始化,条件和 post 都是可选的。让我们看一个例子来更好地理解循环。
package main import ( "fmt" ) func main() { for i := 1; i <= 10; i++ { fmt.Printf(" %d",i) } }
上面的程序会打印出 1 2 3 4 5 6 7 8 9 10 。
在 for 循环中声明的变量只能在循环体内访问,因此 i 不能够在循环体外访问。
break 语句用于在完成正常执行之前突然终止 for 循环,之后程序将会在 for 循环下一行代码开始执行。
让我们写一个从 1 打印到 5 并且使用 break 跳出循环的程序。
package main import ( "fmt" ) func main() { for i := 1; i <= 10; i++ { if i > 5 { break //loop is terminated if i > 5 } fmt.Printf("%d ", i) } fmt.Printf("\nline after for loop") }
1 2 3 4 5 line after for loop
continue 语句用来跳出 for 循环中当前循环。在 continue 语句后的所有的 for
让我们写一个打印出 1 到 10 并且使用 continue 的程序。
package main import ( "fmt" ) func main() { for i := 1; i <= 10; i++ { if i%2 == 0 { continue } fmt.Printf("%d ", i) } }
让我们写更多的代码来演示 for 循环的多样性吧
下面这个程序打印出从 0 到 10 所有的偶数。
package main import ( "fmt" ) func main() { i := 0 for ;i <= 10; { // initialisation and post are omitted fmt.Printf("%d ", i) i += 2 } }
正如我们已经知道的那样,for 循环的三部分,初始化语句、条件语句、post 语句都是可选的。在上面的程序中,初始化语句和 post 语句都被省略了。i 在 for 循环外被初始化成了 0。只要 i<=10 循环就会被执行。在循环中,i 以 2 的增量自增。上面的程序会输出 0 2 4 6 8 10。
上面程序中 for 循环中的分号也可以省略。这个格式的 for 循环可以看作是二选一的 for while 循环。上面的程序可以被重写成:
package main import ( "fmt" ) func main() { i := 0 for i <= 10 { //semicolons are ommitted and only condition is present fmt.Printf("%d ", i) i += 2 } }
10 * 1 = 10 11 * 2 = 22 12 * 3 = 36 13 * 4 = 52 14 * 5 = 70 15 * 6 = 90 16 * 7 = 112 17 * 8 = 136 18 * 9 = 162 19 * 10 = 190
package main import ( "fmt" ) func main() { for no, i := 10, 1; i <= 10 && no <= 19; i, no = i+1, no+1 { //multiple initialisation and increment fmt.Printf("%d * %d = %d\n", no, i, no*i) } }
for { }
package main import "fmt" func main() { for { fmt.Println("Hello World") } }
这里还有一个 range 结构,它可以被用来在 for 循环中操作数组对象。当我们学习数组时我们会补充这方面内容。