首页 文章资讯内容详情

go循环

2026-06-01 4 花语

循环语句用于重复执行一段代码。

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可用于遍历数组,我们将在介绍数组时介绍它。

原文链接: