循环以for开头,后面跟四段控制代码
- 初始化语句,用于初始化变量(可选)
- 条件表达式,用于决定何时中止
- 一个标志,用于循环后的每次迭代的步进(可选)
- 循环块
例1
package main
import "fmt"
func main() {
// x := 1; 初始化变量
// x <5; 条件表达式,决定该循环何时中止
// 标志位代表 x++迭代步进
// {为循环块的开始 }循环块结束
for x := 1; x < 5; x++ {
fmt.Printf("x = %d \n", x)
}
}
变量初始化以后,由后面的条件表达式来保持循环运行,直到该表达式被满足,标志步用于改变初始变量的值步进值
例2
for x := 3; x > 0; x-- {
fmt.Printf("x = %d \n", x)
}
如上面这段代码,x的初始值为3,标志位每次将x的步进减1,当x>0时循环终止。
标志位也支持 += 和 -=运算符,如 ++ — 即为 += 1 -=1
例3
下面的例子将去掉初始化和标志位,放在for以外的部分
y := 1
for x < 3 {
fmt.Printf("y = %d \n", x)
y++
}
y = 3
for y > 0 {
fmt.Printf("y = %d \n", x)
y--
}
以上的例子把x放在了for外面,会得到和前面相同的输出,但是它们的作用域不同
当初始化变量跟在for后面时,它的作用域范围仅在for循环控制块内即{}中
当初始化变量在for外层时,它的作用域范围在外面的块中即{}中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
如图所示,如果将x = 3写到17行,则IDE会提示错误,变量未声明
另外 for 循环不需要 () 来写表达式。也会发生错误
continue和break
Go提供了对for循环控制的的两个关键字
continue: 立即跳转到循环的下一次迭代,而不需要运行它之后的代码
break: 立即中断循环,不在等到满足for 表达式
for x := 1; x < 5; x++ {
fmt.Println("before continue y = ", y, "x = ", x)
continue
y++
fmt.Println("after continue y = ", y, "x = ", x)
}
输出结果如下
before continue y = 0 x = 1
before continue y = 0 x = 2
before continue y = 0 x = 3
before continue y = 0 x = 4
可以看到,continue之后x步进为1 y在continue下面,所以y++并没有执行
break例子
for x := 1; x < 5; x++ {
fmt.Println("before break y = ", y, "x = ", x)
break
y++
fmt.Println("after break y = ", y, "x = ", x)
}
上面的代码会输出
before break y = 0 x = 1
可以看到break后面的任何语句都没有执行