go语言教程:
【for】是go语言中唯一一个用于循环的关键字,但有四种用法,分别是常规的变量迭代(for)、条件循环(while)、死循环(loop)、以及数组迭代(foreach),括号中是其他语言中相似的关键字。
下面用这四种不同的用法,实现打印1,2,3…N的需求。
迭代
// for.go
package main
import "fmt"
func forTest1(N int){
for n := 1; n < N; n++ {
fmt.Println("n=", n)
}
}
func main() {
forTest1(3);
}
可见,在用于迭代时,与C语言中的for循环类似,循环条件被两个分号分为三个部分,【n := 1】声明迭代变量的初始值;【n < N】指明迭代终止的条件;【n++】则是每次迭代,迭代变量的变化操作。
【main】是入口函数,在测试其他用法时,内容需要改为其他函数,为了行文简洁,本文后续不再给出。
条件循环
func forTest2(N int){
n := 0
for n < N{
fmt.Println("n=", n)
n += 1
}
}
【n < N】即为循环条件,非常易于理解。
由于这种使用方法,并没有给出每次循环后,循环变量的变化,所以不要忘记在循环体中给出类似【n += 1】这样的语句,否则就可能陷入死循环。
死循环
如果想陷入死循环,那么只需取消循环条件就可以了,就像下面这样。
for {
fmt.Println("n=", n)
n += 1
}
这种死循环可以用来维持图形界面。但就算是图形界面,也会存在关闭的需求,为了跳出死循环,可以用break
func forTest3(N int){
n := 1
for{
fmt.Println("n=", n)
n += 1
if n>N{
break
}
}
}
【break】作为终止循环的关键字,在任何for语句中都是有效的。相比之下,【continue】可以跳过某一次循环
func forTest4(N int){
for i:=1; i<10; i++{
if i%2==0{ //%表示求余
continue
}
if i > N{
break
}
fmt.Println("i=", i)
}
}
当i可以被2整除的时候,则跳过当前循环;当i大于8的时候,则跳出循环,运行结果如下
>go run for.go
i= 1
i= 3
i= 5
i= 7
数组迭代
数组是类型相同的一组固定长度的序列,下面列举一些声明或初始化数组的方法
var a [3]int // a是长度为3的数组,内容为0
var b = [3]int{1, 2, 3}
c := [3]int{1,2,3}
fmt.Println("c[0]=", c[0])
前三行语句创建三个不同的数组, a a a长度为3,内容为0; b b b和 c c c长度也为3,内容为 1 , 2 , 3 1, 2, 3 1,2,3。
一般来说,数组的长度是恒定的,如果想取出数组中所有值,那么没必要再额外设置一个截止条件。而且对于 i ⩽ N i\leqslant N i⩽N这种截止条件,如果数组的长度不为 N N N那就十分尴尬。
为此,可以使用for循环的数组迭代方法,示例如下
func forTest5(){
d := [4]int{1, 3, 5, 7}
for i,x:= range d {
fmt.Println("d[",i,"]=", x)
}
}
【i,x:= range d】的含义是,从数组 d d d中取出其下标 i i i和下表对应的值 x x x,测试结果如下
>go run for.go
d[ 0 ]= 1
d[ 1 ]= 3
d[ 2 ]= 5
d[ 3 ]= 7