go-for-循环理解

在golang里,循环语句只有for,所以非常重要。for语句又分为多种形式,这里一一记录

第一种

1
2
3
4
5
6
7
8
9
for initialization; condition; post {
// 零个或多个语句
}
这里的for语句不需要小括号,左大括号就像go的方法定义一样,需要与post在同一行。
可选的initialization(初始化)语句在循环开始之前执行。如果存在,它必须是一个简单的语句,比如一个简单的变量声明,一个递增或复制语句,或者一个函数调用。
condition(条件)是一个布尔表达式,再循环的每一次迭代开始前推演,如果推演结果是真,循环则继续执行。条件变成假之后循环结束
post语句在循环体之后(大括号内语句执行完之后)被执行,然后condition(条件)再次被推演。
三部分都是可以省略的。

第二种

省略initialization和post

1
2
3
for condition {
// ...
}

第三种

省略initialization、condition、post

1
2
3
4
for {
// ...
}
循环是无限的,尽管这种形式的循环可以通过break或return等语句进行终止.

第四种

在字符串或者slice数据上迭代

1
2
3
4
for _, arg := range os.Args[1:] {
// ...
}
每次迭代,range产生一对值:索引和这个索引处元素的值。这里不需要索引,但语法上range循环需要处理,因此也必须处理索引。所以这里使用空标识符_(下划线)。空标识符可以用在任何语法需要变量名但是程序逻辑不需要的地方,例如丢弃每次迭代产生的无用索引。