阅读:0

Go语言for(循环结构)

Go 语言中的所有循环类型均可以使用 for 关键字来完成。

基于语句和表达式的基本 for 循环格式如下:

for 初始语句;条件表达式;结束语句{
    循环体代码
}

循环体不停地进行循环,直到条件表达式返回 false 时自动退出循环,执行 for 的}之后的语句。

for 循环可以通过 break、goto、return、panic 语句强制退出循环。for 的初始语句、条件表达式、结束语句的详细介绍如下。

for 中的初始语句——开始循环时执行的语句

初始语句是在第一次循环前执行的语句,一般使用初始语句执行变量初始化,如果变量在此处被声明,其作用域将被局限在这个 for 的范畴内。

初始语句可以被忽略,但是初始语句之后的分号必须要写,代码如下:
step := 2
for ; step > 0; step-- {
    fmt.Println(step)
}
这段代码将 step 放在 for 的前面进行初始化,for 中没有初始语句,此时 step 的作用域就比在初始语句中声明 step 要大。

for 中的条件表达式——控制是否循环的开关

对每次循环开始前计算的表达式,如果表达式为 true,则循环继续,否则结束循环。条件表达式可以被忽略,被忽略条件的表达式默认形成无限循环。

1) 结束循环时带可执行语句的无限循环

下面代码忽略条件表达式,但是保留结束语句,代码如下:
var i int

for ; ; i++ {

    if i > 10 {
        break
    }
}
代码说明如下:
  • 第 3 行,无须设置 i 的初始值,因此忽略 for 的初始语句。两个分号之间是条件表达式,也被忽略,此时循环会一直持续下去;for 的结束语句为 i++,每次结束循环前都会调用。
  • 第 5 行,判断 i 大于 10 时,通过 break 语句跳出 for 循环到第 9 行。

2) 无限循环

上面的代码还可以改写为更美观的写法,代码如下:
var i int

for {

    if i > 10 {
        break
    }

    i++
}
代码说明如下:
  • 第 3 行,忽略 for 的所有语句,此时 for 执行无限循环。
  • 第 9 行,将 i++ 从 for 的结束语句放置到函数体的末尾是等效的,这样编写的代码更具有可读性。

无限循环在收发处理中较为常见,但需要无限循环有可控的退出方式来结束循环。

3) 只有一个循环条件的循环

在上面代码的基础上进一步简化代码,将 if 判断整合到 for 中,变为下面的代码:
var i int

for i <= 10 {
    i++
}
在代码第 3 行中,将之前使用 if i>10{} 判断的表达式进行取反,变为判断 i 小于等于 10 时持续进行循环。

上面这段代码其实类似于其他编程语言中的 while,在 while 后添加一个条件表达式,满足条件表达式时持续循环,否则结束循环。

for 中的结束语句——每次循环结束时执行的语句

在结束每次循环前执行的语句,如果循环被 break、goto、return、panic 等语句强制退出,结束语句不会被执行。