最简单的基于计数器的迭代,基本形式为:
for 初始化语句; 条件语句; 修饰语句 {}
这三部分组成的循环的头部,它们之间使用分号 ; 相隔,但并不需要括号 () 将它们括起来。
您还可以在循环中同时使用多个计数器:
for i, j := 0, N; i < j; i, j = i+1, j-1 {}
这得益于 Go 语言具有的平行赋值的特性,for 结构的第二种形式是没有头部的条件判断迭代(类似其它语言中的 while 循环),基本形式为:for 条件语句 {}
。
您也可以认为这是没有初始化语句和修饰语句的 for 结构,因此 ;;
便是多余的了
条件语句是可以被省略的,如 i:=0; ; i++
或 for { }
或 for ;; { }(;;
会在使用 Gofmt 时被移除):这些循环的本质就是无限循环。 最后一个形式也可以被改写为 for true { },但一般情况下都会直接写 for { }
。
如果 for 循环的头部没有条件语句,那么就会认为条件永远为 true,因此循环体内必须有相关的条件判断以确保会在某个时刻退出循环。
package main
import (
"fmt"
)
func main() {
a := []int{1, 2, 3, 4, 5, 6}
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
a[i], a[j] = a[j], a[i]
}
for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 5 {
break
}
fmt.Println(i)
}
}
}
下一节:for-range 结构是 Go 语言特有的一种迭代结构,它在许多情况下都非常有用。它可以迭代任何一个集合,包括数组(array)和字典(map),同时可以获得每次迭代所对应的索引和值。