Golang for支持三种循环方式,包括类似 while 的语法。

for循环是一个循环控制结构,可以执行指定次数的循环。

语法

Go语言的For循环有3中形式,只有其中的一种使用分号。

  1. for init; condition; post { }
  2. for condition { }
  3. for { }
  4. init 一般为赋值表达式,给控制变量赋初值;
  5. condition 关系表达式或逻辑表达式,循环控制条件;
  6. post 一般为赋值表达式,给控制变量增量或减量。
  7. for语句执行过程如下:
  8. ①先对表达式 init 赋初值;
  9. ②判别赋值表达式 init 是否满足给定 condition 条件,
  10. 若其值为真,满足循环条件,则执行循环体内语句,
  11. 然后执行 post,进入第二次循环,再判别 condition
  12. 否则判断 condition 的值为假,不满足条件,
  13. 就终止for循环,执行循环体外语句。
  1. s := "abc"
  2. for i, n := 0, len(s); i < n; i++ { // 常见的 for 循环,支持初始化语句。
  3. println(s[i])
  4. }
  5. n := len(s)
  6. for n > 0 { // 替代 while (n > 0) {}
  7. n--
  8. println(s[n]) // 替代 for (; n > 0;) {}
  9. }
  10. for { // 替代 while (true) {}
  11. println(s) // 替代 for (;;) {}
  12. }

不要期望编译器能理解你的想法,在初始化语句中计算出全部结果是个好主意。

  1. package main
  2. func length(s string) int {
  3. println("call length.")
  4. return len(s)
  5. }
  6. func main() {
  7. s := "abcd"
  8. for i, n := 0, length(s); i < n; i++ { // 避免多次调用 length 函数。
  9. println(i, s[i])
  10. }
  11. }

输出:

  1. call length.
  2. 0 97
  3. 1 98
  4. 2 99
  5. 3 100

循环嵌套

在 for 循环中嵌套一个或多个 for 循环

语法

以下为 Go 语言嵌套循环的格式:

  1. for [condition | ( init; condition; increment ) | Range]
  2. {
  3. for [condition | ( init; condition; increment ) | Range]
  4. {
  5. statement(s)
  6. }
  7. statement(s)
  8. }

实例:

以下实例使用循环嵌套来输出 2 到 100 间的素数:

  1. package main
  2. import "fmt"
  3. func main() {
  4. /* 定义局部变量 */
  5. var i, j int
  6. for i=2; i < 100; i++ {
  7. for j=2; j <= (i/j); j++ {
  8. if(i%j==0) {
  9. break // 如果发现因子,则不是素数
  10. }
  11. }
  12. if(j > (i/j)) {
  13. fmt.Printf("%d 是素数\n", i)
  14. }
  15. }
  16. }

无限循环

如过循环中条件语句永远不为 false 则会进行无限循环,我们可以通过 for 循环语句中只设置一个条件表达式来执行无限循环:

  1. package main
  2. import "fmt"
  3. func main() {
  4. for true {
  5. fmt.Printf("这是无限循环。\n");
  6. }
  7. }