循环语句 可以用来重复执行某一段代码。在 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.