概述
计算机中,我们经常需要对某些代码重复执行多次,一开始我们只懂的多复制几遍来让程序执行
package main
import "fmt"
func main() {
fmt.Println("镜头前的你好帅!!")
fmt.Println("镜头前的你好帅!!")
fmt.Println("镜头前的你好帅!!")
fmt.Println("镜头前的你好帅!!")
}
这样的做法,让我们要做的事情繁琐了很多,如果我们要输出1000句语句,那么是不是要把这些代码复制1000遍,非常非常麻烦,不过好在基本每个编程语言都提供了循环语句,简化了需要循环使用代码的使用情况,而Go也提供了 for 语句,来解决这些问题
格式
for 变量初始条件; 循环条件; 变量迭代{}
for 循环条件{}
for {}
代码示例
for 变量初始条件; 循环条件; 变量迭代{}
package main
import "fmt"
func main() {
for init := 1; init < 4; init++ {
fmt.Println("镜头前的你好帅!!")
}
}
这里连续输出了3句 "镜头前的你好帅!!",忽略这个的双引号。
看到这里,有人可能会很好奇,这个 for语句的循环顺序是个什么样子,那么下面讲一些
程序指向到 for语句这边,先初始化了 init变量,把它赋值为1,然后去循环条件中判断一下,init 是否小于4,由于条件达成 1 < 4,进去循环代码块中,打印了一遍 "镜头前的你好帅!!",当循环代码块执行完毕后,它会结束第一次循环;
然后进入变量迭代这个地方,也就是 init++,这个时候,因为 init++,所以 init 变为2了,然后再去循环条件中判断一下,这时候 init为2 < 4,所以条件达成,再次进入循环代码块,打印 "镜头前的你好帅!!",然后退出第二次循环;
然后再次进入变量迭代 init++,这时候 init为3,再去循环条件中判断init 是否小于4,由于 init 为3 < 4,所以条件再次达成,进入循环代码块中,再次打印 "镜头前的你好帅!!",然后退出第三次循环,这时候已经打印3次"镜头前的你好帅!!" 了,跟我们上面说连续输出3句的答案是一样的,下面就是如何结束这个 for循环了
当第3次循环结束后,进入 变量迭代,这时候 init为4,然后去循环条件中,跟 init < 4对比,由于 init这时候等于4,所以 4 < 4是错误的,所以 for循环彻底结束
为了给大家证明一下,init的值真的为4,我把变量的所属范围,扩大到整个 main函数
package main
import "fmt"
func main() {
var init int
for init = 1; init < 4; init++ {
fmt.Println("镜头前的你好帅!!")
}
fmt.Println("init 的值为:", init)
}
我再给大家画个图感受一下
1 只被执行1次,其它执行多少次,都是看条件的
1执行后的顺序,就是 2 → 3 → 4 → 2 → 3 → 4 依次循环(如果条件允许的话)
for 循环条件{}
在Go语言中,是没有 while循环的,但是我们可以用这个模拟一下
什么是 while循环呢?
while (循环条件) {}
这个展示的格式,我是以 Java为例的
package main
import "fmt"
func main() {
var init int = 1
for init < 4{
fmt.Println("镜头前的你好帅!!")
init++
}
}
这个看起来是不是跟上面的一样,没错,输出的结果是一样的,只是说形式变了而已,它只是没把变量的定义在for后面,for 后面只有一个判断条件,循环迭代我们写在了循环代码块中,这里就不多说了
for {}
package main
import "fmt"
func main() {
var num int = 1
for {
fmt.Println("num 的值为:", num)
if num >= 20 {
break
}
num++
}
}
因为这个 for循环是没有循环条件在的,所以我们循环代码块的时候,要给它一个条件,让它执行到某个条件就停止下来,不然这个 for循环会死循环下去...
因为在这个代码中,我们用到了 break关键字,那么接下来就来讲这个关键字在 for循环中的用处
break在循环中的应用
既然上面有代码了,就不多贴一遍了,就说下在代码中,break的用处好了
在循环中,如果执行到break,那么程序会终止这个循环语句,但在多层循环中,只是终止了内层循环语句
package main
import "fmt"
func main() {
for i := 1; i < 5; i++ {
for j := 1; j < 5; j++ {
if i == 3{
break
}
fmt.Println("这时候的i为:", i)
}
}
}
从这个输出可以看到,在内循环中,当判断到 i == 3的时候,终止了内层循环,而外层循环照样可以执行,这时候只要外循环再执行一次,那么内循环就会再次被执行到
那么能不能直接跳出循环呢?答案是有的 ,不过我们需要让 break关键字跟标签配合
break和标签的使用
package main
import "fmt"
func main() {
label:
for i := 1; i < 5; i++ {
for j := 1; j < 5; j++ {
if i == 3{
break label
}
fmt.Println("这时候的i为:", i)
}
}
fmt.Println("程序执行完,终止")
}
输出只截取了下面一部分,当执行内存循环的时候,判断到 i == 3,执行 break label,这时候,程序的执行就会跳到 label标签定义的地方,如上面代码所示 label :
continue在循环中的应用
package main
import "fmt"
func main() {
for i := 1; i < 5; i++ {
if i == 3 {
continue
}
fmt.Println("这个i的值为:", i)
}
fmt.Println("程序执行完,终止")
}
从这个输出可以看出,continue 关键字只是跳出了 i == 3的时候的那一次循环,整个循环之后该怎么执行就该怎么执行,不会跟 break关键字一样,直接终止整个循环,当然这个你可以自己测试一下,把 continue 换成break就好,换成 break后,你会发现打印出来的内容,比用 continue关键字的时候,少了一条 "这个i的值为:4"
在这直接给你们贴图出来看,这个是上面的代码 continue换成break代码后的输出
多种循环中使用 continue
package main
import "fmt"
func main() {
for i := 1; i < 5; i++ {
for j := 1; j < 5; j++ {
if i == 3{
continue
}
fmt.Println("这时候的i为:", i)
}
}
fmt.Println("程序执行完,终止")
}
为什么是这么输出呢?其实还是例子没举好,在这里,程序其实执行了4次continue语句,当 i == 3的时候,if 语句判断完之后,执行了 continue语句,其实只是跳出了这次内循环,跳出后,因为内循环的条件还能符合,就再次进入内循环,再次执行 if语句中的continue,以此循环4次,所以才没有输出 "这时候的i为:3"。而上面相同代码的 break,是只进入了1次内循环,然后遇到 break后,直接终止内循环,因为还符合外循环的条件,所以再次进入内循环,不过这次的值已经变为4了。
continue和标签的使用
package main
import "fmt"
func main() {
label:
for i := 1; i < 5; i++ {
for j := 1; j < 5; j++ {
if i == 3{
continue label
}
fmt.Println("这时候的i为:", i)
}
}
fmt.Println("程序执行完,终止")
}
从这个可以看到,跟 break跟标签使用不一样,break那边是直接跳到外层for循环后,直接终止了;而 continue跳出外循环后,还继续进去执行,只是没有执行 i == 3这部分的内容
从这两个可以看出来,break跟标签可以停止整个大的循环,而 continue跟标签只能跳出一次大循环,如果跳出后,还符合循环条件,那么会再次进入循环
goto在循环中的应用
goto是跳转语句用的,它只能跟标签结合使用
package main
import "fmt"
func main() {
label:
for i := 1; i < 5; i++ {
for j := 1; j < 5; j++ {
if i == 3{
goto label
}
fmt.Println("这时候的i为:", i)
}
}
fmt.Println("程序执行完,终止")
}
在这里,goto之后,程序进入了死循环,每次当 i == 3之后,调用了 goto label,程序又重新跳转到 for循环语句上面标签处,开始重新执行for,不过这个时候,跟上面的continue和break跳转不一样,它是重新开始执行,所以进入了死循环
return在循环中的应用
package main
import "fmt"
func main() {
for i := 1; i < 5; i++ {
for j := 1; j < 5; j++ {
if i == 3{
return
}
fmt.Println("这时候的i为:", i)
}
}
fmt.Println("程序执行完,终止")
}
从输出看出,程序没有输出 "这时候的i为:4",也没有输出 "程序执行完,终止",这是怎么回事呢?
其实 return关键字,是返回结果,终止函数的执行,在调用的函数中,是跳出调用的函数;如果是main函数,那么是直接程序终止。所以在这里,程序没有执行到后面的 "程序执行完,终止",所以也没有输出它
---
欢迎大家关注下个人的「公众号」:**独醉贪欢**
最后
以上就是着急草丛为你收集整理的如何让循环里面语句执行完之后再去循环第二次_Go循环语句的使用的全部内容,希望文章能够帮你解决如何让循环里面语句执行完之后再去循环第二次_Go循环语句的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复