如果想要重复执行某些语句, 只有 for结构可以使用。不过不用担心,for结构非常灵活。
但是,其它许多语言中也没有发现和 do while 完全对等的 for 结构,可能是因为这种需求并不是那么强烈
基于计数器的迭代
书写格式
for i := 0; i < 5; i++ {
fmt.Printf("This is the %d iteration\n", i)
}
注意事项
{
必须和for语句在同一行- 可以使用多个计数器
for i, j := 0, N; i < j; i, j = i+1, j-1 {}
- 关于字符的迭代一定要注意,Go的字符串是unicode编码,对使用了非ASCII编码的字符的字符串迭代很可能发生错误(不过存在解决方案)
基于条件判断的迭代
类似while循环
格式
var i int = 5
for i >= 0 {
i = i - 1
fmt.Printf("The variable i is now: %d\n", i)
}
无限循环
格式
for ;; {
}
for {
}
for i := 0;;i++{
}
for t, err = p.Token(); err == nil; t, err = p.Token() {
...
}
可以使用
for-range结构可以迭代任何一个集合,包括了数组和map。语法类似for-each,且可以获得每次迭代所对应的索引,形式为 for pos, val := range coll { }
。值得注意的是, val
是对应索引的值拷贝,当然,如果 val
为指针,则可以修改集合中的原值
一个字符串是unicode编码的字符(或者说 rune
)集合,每个 rune
字符和索引在for-range中是一一对应的,可以根据UTF-8规则自动识别unicode编码的字符, 因此可以用来迭代字符串