Go教程:07-控制结构for循环loop

Go教程:07-控制结构for循环loop

for循环是编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}. 循环语句是用来重复执行某一段代码.

for 是 Go 语言唯一的循环语句.Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环.

1.for-loop循环

for initialisation; condition; post {  
}

初始化语句只执行一次.循环初始化后,将检查循环条件.如果条件的计算结果为 true ,则 {} 内的循环体将执行,接着执行 post 语句.post 语句将在每次成功循环迭代后执行.在执行 post 语句后,条件将被再次检查.如果为 true, 则循环将继续执行,否则 for 循环将终止.(译注:这是典型的 for 循环三个表达式,第一个为初始化表达式或赋值语句;第二个为循环条件判定表达式;第三个为循环变量修正表达式,即此处的 post )

这三个组成部分,即初始化,条件和 post 都是可选的.

package main  
import "fmt"  
func main() {  
   for a := 0; a < 12; a++ {  
      fmt.Print(a,"\n")  
   }  
}  

2.for-nested嵌套

Go 语言允许用户在循环内使用循环.接下来我们将为大家介绍嵌套循环的使用.

for [condition |  ( init; condition; increment ) | Range]
{
   for [condition |  ( init; condition; increment ) | Range]
   {
      statement(s);
   }
   statement(s);
}

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

package main

import "fmt"

func main() {
   /* 定义局部变量 */
   var i, j int

   for i=2; i < 100; i++ {
      for j=2; j <= (i/j); j++ {
         if(i%j==0) {
            break; // 如果发现因子,则不是素数
         }
      }
      if(j > (i/j)) {
         fmt.Printf("%d  是素数\n", i);
      }
   }  
}

3.for-break

break 语句用于在完成正常执行之前突然终止 for 循环,之后程序将会在 for 循环下一行代码开始执行.

让我们写一个从 3 打印到 10 并且使用 break 跳出循环的程序.

package main

import (  
    "fmt"
)

func main() {  
    for i := 3; i <= 20; i++ {
        if i > 10 {
            break //loop is terminated if i > 5
        }
        fmt.Printf("%d ", i)
    }
    fmt.Printf("\nline after for loop")
}

4.for-continue

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)
    }
}

5.for-goto

Go 语言的 goto 语句可以无条件地转移到过程中指定的行.

goto 语句通常与条件语句配合使用.可用来实现条件转移, 构成循环,跳出循环体等功能.

但是,在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难.

语法

goto label;
..
.
label: statement;

示意图

golang_goto

在变量 a 等于 15 的时候跳过本次循环并回到循环的开始语句 LOOP 处:

package main

import "fmt"

func main() {
   /* 定义局部变量 */
   var a int = 10

   /* 循环 */
   LOOP: for a < 20 {
      if a == 15 {
         /* 跳过迭代 */
         a = a + 1
         goto LOOP
      }
      fmt.Printf("a的值为 : %d\n", a)
      a++     
   }  
}
目录