重要的事情: for 是 Go 语言里面唯一的循环语句。
1. for 语句基础形式
for 语句有几种形式,先以最基础的为例:
// 基础for循环与C语言for循环结构类似
for init; condition; post {
// 零个或多个语句
}
例如:
for i := 0; i < 100; i++ {
fmt.Println("i=",i)
}
其中:
init(初始化)语句在循环开始之前执行。如果存在,它必须是一个简单的语句,例如一个简单的变量声明语句。
condition(条件)语句是一个布尔表达式,在循环的每一次迭代前计算,如果计算结构为真,则循环继续。
post 语句在循环体之后被执行,然后进行条件计算。
在 Go 的 for 语法中,init,condition 和 post 语句都是可以省略的。 不同的省略方式产生不同的形式。
// 省略init和post,类似传统的"while"循环
for condition {
// ...
}
// 例如
var i = 0
for i < 100 {
fmt.Println("i=",i)
i++
}
// init,condition 和 post 都省略, 类似传统的无限循环
for {
// ...
}
2. for 语句迭代形式
for 语句还有另一种形式,即与 range 语句一起的迭代形式。 可迭代的数据类型可以是: 字符串, 数组(array), 切片(slice), 通道(channel) 或 集合(map)。
其中:在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对的 key 值。
例如:
package main
import "fmt"
func main() {
nums := []int{1, 2, 3, 4}
for i, num := range nums {
fmt.Println("index:", i, ", num:", num)
}
kvs := map[string]string{"a": "apple", "b": "banana"}
for k, v := range kvs {
fmt.Printf("%s -> %s\n", k, v)
}
}