循环语句 可以用来重复执行某一段代码。在 C 语言中,循环语句有 for 、 while 和 do while 三种循环。但在 Go 中只有 for 一种循环语句。下面是 for 循环语句的四种基本模型:
// for 接三个表达式
for initialisation; condition; post {
code
}
// for 接一个条件表达式
for condition {
code
}
// for 接一个 range 表达式
for range_expression {
code
}
// for 不接表达式
for {
code
}
接下来我们对每一种模型进行讲解。

接一个条件表达式

下面的例子利用 for 循环打印 0 到 3 的数值:
num := 0
for num < 4 {
fmt.Println(num)
num++
}
运行该程序输出如下:
0
1
2
3

接三个表达式

for 后面接的这三个表达式,各有各的用途:
- 第一个表达式(
initialisation):初始化控制变量,在整个循环生命周期内,只执行一次; - 第二个表达式(
condition):设置循环控制条件,该表达式值为 true 时循环,值为 false 时结束循环; - 第三个表达式(
post):每次循环完都会执行此表达式,可以利用其让控制变量增量或减量。
这三个表达式,使用 ; 分隔。
for num := 0; num < 4; num++ {
fmt.Println(num)
}
该程序的输出和上面的例子是等价的。这里注意一点,在第一个表达式声明的变量 num 的作用域只在 for 循环里面有效。

接一个 range 表达式

在 Go 中遍历一个可迭代的对象一般使用 for-range 语句实现,其中 range 后面可以接数组、切片、字符串等, range 会返回两个值,第一个是索引值,第二个是数据值。
str := "abcd"
for index, value := range str{
fmt.Printf("index %d, value %c\n", index, value)
}
运行该程序输出如下:
index 0, value a
index 1, value b
index 2, value c
index 3, value d

不接表达式

for 后面不接表达式就相当于无限循环,当然,可以使用 break 语句退出循环。
下面两种无限循环的写法等价,但一般使用第一种写法。
// 第一种写法
for {
code
}
// 第二种写法
for ;; {
code
}
下面是一个输出数字 0 到 3 的例子:
i := 0
for {
if i > 3 {
break
}
fmt.Println(i)
i++
}
运行该程序输出如下:
0
1
2
3

break 语句

break 语句用于终止 for 循环,之后程序将执行在 for 循环后的代码。上面的例子已经演示了 break 语句的使用。

continue 语句

continue 语句用来跳出 for 循环中的当前循环。在 continue 语句后的所有的 for 循环语句都不会在本次循环中执行,执行完 continue 语句后将会继续执行一下次循环。下面的程序会打印出 10 以内的奇数。
for num := 1; num <= 10; num++ {
if num % 2 == 0 {
continue
}
fmt.Println(num)
}
运行该程序输出如下:
1
3
5
7
9
参考文献:
[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序设计语言, Translated by 李道兵, 高博, 庞向才, 金鑫鑫 and 林齐斌, 机械工业出版社, 2017.










