Go入门14:流程控制之 for

Go语言只有for循环这一种循环结构。

for expression1; expression2; expression3 {

    //…

}

expression1、expression2、expression3都是表达式,其中expression1和expression3是变量声明或者函数调用返回值之类的。

1)expression1:在第一次循环开始之前调用;

2)expression2:用来条件判断,每轮迭代开始前被求值;

3)expression3:每轮循环结束之时调用;

初始化语句一般是一个短变量声明,这里声明的变量仅在整个 for 循环语句可见。

如果条件表达式的值变为 false,那么迭代将终止。

sum := 0

for index := 0; index < 10; index++ {

    sum += index

}

fmt.Println(“sum is equal to “, sum)

注意:不像 C,Java,或者 Javascript 等其他语言,Go语言中的for循环语句的三个部分不需要用括号括起来,但循环体必须用 { } 括起来。

基于计数器的迭代

for 初始化语句; 条件语句; 修饰语句 {

    //循环语句

}

我们用for循环来计算10以内正整数的和。

sum := 0

for i := 0; i < 10; i++ {

    sum += i

}

fmt.Println(sum)    // 45

这三部分组成的循环的头部,它们之间使用分号 ; 相隔,但并不需要括号 () 将它们括起来。例如:

for (i = 0; i < 10; i++) { } //非法代码!

if-else 语句类似,for循环中左花括号 { 必须和 for 语句在同一行,计数器的生命周期在遇到右花括号 }  时便终止。一般习惯使用 i、j、z 或 ix 等较短的名称命名计数器。

基于条件判断的for循环

有些时候如果我们忽略expression1和expression3:

sum:=1

for ; sum <1000; {

    sum += sum

}

其中“;”也可以省略,那么就变成如下的代码了,是不是似曾相识?对,这就是while的功能。

for 条件语句 {}

sum := 1

for sum < 1000 {

    sum += sum

}

多个赋值操作

进行多个赋值操作,可以使用平行赋值:i, j = i+1, j-1

for-range 结构

这是 Go 语言特有的一种的迭代结构,它一般用来遍历数组,slice和map等集合。

我们用range来遍历一个数组,以下代码会打印出每个值的序号和对应的值。

arr := […]int{6, 7, 8}

for i, v := range arr {

    fmt.Println(i, v)

}

由于 Go 支持 “多值返回”,而对于“声明而未被调用”的变量,编译器会报错,在这种情况下,可以使用_来丢弃不需要的返回值。例如:

for _,v := range map {

    fmt.Println(“map’s val:”, v)

}

无限循环

Go 语言有以下几种无限循环:

i:=0; ; i++ 

for { }    // 常用 

for ;; { }   

for true { } 

这些无限循环都是 for 循环的条件语句被省略了。如果 for 循环的头部没有条件语句,那么就会认为条件永远为 true。因此如果不想造成死循环,循环体内必须有相关的条件判断以确保会在某个时刻退出循环。

关键字 goto break continue

goto

可以无条件地转移到过程中指定的行。通常与条件语句配合使用,可用来实现条件转移、构成循环、跳出循环体等功能。

goto对应(标签)既可以定义在for循环前面,也可以定义在for循环后面,当跳转到标签地方时,继续执行标签下面的语句

break

跳出当前循环;

continue

跳过本次循环,进入下一轮循环。

当嵌套过深的时候,break可以配合标签使用,即跳转至标签所指定的位置。

for index:=10; index>0; index– {

    if index ==5 { 

        break    //或者continue

    }

    fmt.Println(index)

}

//break打印出来10、9、8、7、6

//continue打印出来10、9、8、7、6、4、3、2、1

break和continue还可以跟着标号,用来跳到多重循环中的外层循环。

    原文作者:laigw
    原文地址: https://www.jianshu.com/p/9fbbb9f843ae
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞