go循环
循环语句用于重复执行一段代码。
for语句是Go中唯一的循环语句。Go没有提供其他语言(如C)中的while和dowhile语句。
for语句语法
for语句的语法如下:
forinitialisation;condition;post{ }12 
其中,initialisation为初始化语句,该语句仅执行一次。initialisation语句结束后,接着对condition求值,如果condition求值结果为true,则执行大括号{}里面的循环体,然后执行post语句,如果condition求值结果为false则退出循环。post语句会在每次循环体执行结束后执行。执行完post语句之后,condition会被重新求值,如果是true,则继续执行循环体,否则退出循环。
在Go中for语句头部的三个部分:initialisation,condition,post都是可选的。让我们看一个例子以更好的理解for语句。
例子
下面的程序使用for循环打印1到10之间的整数。
packagemain import( "fmt" ) funcmain(){ fori:=1;i<=10;i++{ fmt.Printf("%d",i) } } 123456789101112 
在上面的程序中,i被初始化为1。条件语句判断i是否小于等于10,如果是则打印i,否则结束循环。post语句在每次迭代结束时将i递增1。直到i的值大于10循环结束。
上面的程序打印:12345678910
在for头部定义的变量仅在for语句范围内可见,因此i不能在for循环体外被访问。
break
break语句用于终止for循环,继续执行for循环后面的语句。
下面的程序打印1到5之间的整数。请注意该程序中break的用法。
packagemain import( "fmt" ) funcmain(){ fori:=1;i<=10;i++{ ifi>5{ break//loopisterminatedifi>5 } fmt.Printf("%d",i) } fmt.Printf("\nlineafterforloop") }123456789101112131415 
在上面的程序中,每次迭代都会检查i的值,如果i大于5则执行break语句跳出循环,并执行for循环后面的那条fmt.Printf语句。上面的程序输出如下:
12345 lineafterforloop12 
continue
continue语句用于跳过for循环的当前迭代。循环体中continue语句之后的所有语句将被跳过不予执行。循环将继续执行下一次迭代。
让我们写一个程序利用continue来打印1到10之间的奇数。
packagemain import( "fmt" ) funcmain(){ fori:=1;i<=10;i++{ ifi%2==0{ continue } fmt.Printf("%d",i) } }1234567891011121314 
在上面的程序中,ifi%2==0检测i除以2的余数是否为0,如果为0则i是偶数,利用continue语句跳过当前迭代并继续下一次迭代。因此continue语句之后的fmt.Printf语句将不被执行,并且循环进入到下一次迭代。上面的程序输出为:13579。
更多例子
让我们再写一些代码来演示for循环的其它变体。
下面的程序打印0到10之间的所有偶数。
packagemain import( "fmt" ) funcmain(){ i:=0 for;i<=10;{//initialisationandpostareomitted fmt.Printf("%d",i) i+=2 } }12345678910111213 
我们已经知道for循环头部的三个部分initialisation,condition,post都是可选的。上面的程序中,忽略了initialisation和post部分。i在for循环之外初始化为0,只要i<=10循环就一直执行,i在循环体内每次递增2。上面的程序输出为:0246810。
上面程序中的分号(;)也可以省略。这种形式的for循环可以视为while循环的替代品。上面的程序可以被重写如下:
packagemain import( "fmt" ) funcmain(){ i:=0 fori<=10{//semicolonsareommittedandonlyconditionispresent fmt.Printf("%d",i) i+=2 } }12345678910111213 
可以在for循环中声明和操作多个变量,比如下面的程序:
packagemain import( "fmt" ) funcmain(){ forno,i:=10,1;i<=10&&no<=19;i,no=i+1,no+1{//multipleinitialisationandincrement fmt.Printf("%d*%d=%d\n",no,i,no*i) } }123456789101112 
上面的程序中,no和i被声明并初始化为10和1。它们在每次迭代结束时递增1。在condition部分使用&&操作符来确保i小于或等于10并且no小于或等于19。程序的输出如下:
10*1=10
11*2=22
12*3=36
13*4=52
14*5=70
15*6=90
16*7=112
17*8=136
18*9=162
19*10=19012345678910
无限循环
可以用下面的语法实现无限循环:
for{ }12 
下面的程序将一直打印HelloWorld永不终止。
packagemain import"fmt" funcmain(){ for{ fmt.Println("HelloWorld") } }123456789 
如果你在goplayground执行上面的程序,你将得到一个错误:processtooktoolong。请尝试在本地系统中运行它以无限打印"HelloWorld"。
还有一个rangefor可用于遍历数组,我们将在介绍数组时介绍它。
原文链接: