你好,我是四哥。
上篇文章我们学习了 if-else 语法,这篇文章来学习循环语句。
循环语句用于重复执行一段代码。
Go 语言里只有 for 一种循环语句,没有其他语言(比如 C 语言等)具有的 while 或者 do-while 循环。
for 循环语法
initialisation 初始化语句只会被执行一次,初始化完成之后会检查 condition 条件是否为 true,如果是的话将会执行 {} 里的代码,接着会执行 post 语句。每次 {} 里的循环语句成功迭代后都会执行 post 语句,接着会重新检查 condition 是否为 true。如果为 true,则会继续执行循环语句,否则循环终止。
在 Go 中,initialisation、condition 和 post 这三这都是可选的。让我们来看一个例子以便更好地理解 for 循环。
示例
我们编写一个程序,使用 for 循环打印 1-10 的所有整数。
执行
在上面代码,i 被初始化为 1,条件语句将检查 i <= 10。如果条件为 true,则打印 i 的值,否则终止循环。post 语句在每次迭代结束时将 i 递增 1,一旦 i 大于 10,循环终止。
上面的代码打印输出:1 2 3 4 5 6 7 8 9 10
在 for 循环中声明的变量仅在循环体范围内可用。因此在 for 循环体之外是不能访问变量 i 的。
break
break 用于终止 for 循环并跳出循环继续执行 for 循环后面的语句。
我们修改下之前的代码,使用 break 语句实现只打印 1-5 之间所有整数。
执行
在上面的代码中,每次迭代都会检查 i 的值。如果 i 大于 5,则执行 break 并终止循环,然后执行 for 循环之后的 print 语句。
上面的程序会输出:
continue
continue 语句用于跳过 for 循环的当前迭代。本次迭代中,for 循环里面、continue 语句之后的代码都不会执行,继续进行下一次迭代。
让我们编写一个程序,使用 continue 打印从 1-10 的所有奇数。
执行
在上面的代码行 if i%2 == 0,检查 i 除以 2 的余数是否为 0。如果为零,则该数为偶数,执行 continue 语句,则不会调用 continue 之后的 print 语句,并且循环继续进行下一次迭代。
上述程序的输出:1 3 5 7 9。
嵌套循环
一个 for 循环内部有另一个 for 循环称为嵌套 for 循环。
我们通过编写一个打印以下序列的程序来理解嵌套的 for 循环。
下面的程序使用嵌套 for 循环打印上述序列。
第 8 行的变量 8 存储序列的行数,我们这里是 5。外部 for 循环将 i 从 0 迭代到 4,内部 for 循环将 j 从 0 迭代到 i 的当前值。内部循环为每次迭代打印 * ,外部循环在每次迭代结束时打印一个新行。
运行这个程序将会输出上面的有序序列。
执行
标签
标签(label)可用于在内部 for 循环中断外部循环。让我们通过一个简单的例子来理解下:
执行
上面的程序比较容易理解,将会输出:
上面的代码没什么特别的,我们继续往下看。
如果我们想实现当 i 和 j 相等时,停止打印该怎么办?我们需要做的是从内部循环破坏外部 for 循环。我们尝试在内部 for 循环判断当 i 和 j 相等时,执行 break 语句看能够实现中断外部 for 循环。
执行
上面的代码,当判断 i 和 j 相等时,我们在内部 for 循环中会执行 break 语句,但这只会中断本次内部 for 循环,外部循环将继续执行。
程序输出:
这显然不是我们预期的输出。当 i 和 j 都相等时,即它们都等于 1 时,我们需要停止打印。
这时候标签(label)就可以派上用场了。标签可用于中断外部循环,让我们用 label 重写上面的程序。
执行
在上面的代码,我们在第 8 行循环的外部添加了名为 outer 的标签,在第 13 行通过指定跳转到该标签来终止外部循环,当 i 和 j 相等时,程序将停止打印。
执行代码输出:
更多示例
我们通过更多的示例学习下 for 语句的不用用法。
下面的代码打印从 0 到 10 的所有偶数。
执行
我们已经知道,for 语句中 initialisation、condition 和 post 都是可选的。上面代码中,initialisation 和 post 都被忽略了,在循环外部,变量 i 已经初始化为 0。只要 i <= 10,就会执行循环,在 for 循环内部 i 每次都增加 2.
上述代码的 for 循环语句的分号也可以省略。这种格式可以认为是 while 循环的替代方案。上面的代码可以重写为:
执行
可以在 for 语句中声明和操作多个变量。让我们编写一个程序,使用多个变量声明打印以下序列。
执行
在上面的代码中,no 和 i 分别被声明和初始化为 10 和 1,每次迭代结束时都递增 1。在 condition 条件中使用布尔运算符 && 来确保 i 小于或等于 10 并且 no 小于或等于 19。
无限循环
无限循环的语法如下:
下面的代码将会循环不停地打印 Hello World。
如果你在 go playground 中运行上面程序,将会报错:“process took too long”。在本地环境执行时将无限打印 Hello World。
Go 语言里面还有一个 for-range 语句可以用于循环操作数组,我们将在数组章节里学习这个语法。
via: https://golangbot.com/loops/
作者:Naveen R
这是持续翻译的第 34/100 篇优质文章。
如果你有想交流的话题,欢迎留言。
如果您的朋友也在学习 Go 语言,相信这篇文章对 TA 有帮助,欢迎转发分享给 TA,非常感谢!