【30天熟悉Go语言】8 Go流程控制之循环结构for range、goto、break、continue

客官°小女子只卖身不卖艺 2023-10-12 14:16 164阅读 0赞

文章目录

  • 一、前言
  • 二、for循环
    • 1、语法
      • 1)和Java的for循环一样
      • 2)和Java的while一样
      • 3)和Java的for(;;)一样
    • 2、for语句执行过程
  • 三、for range
    • 1、语法
      • 1)遍历key、value
        • 只遍历value
      • 2)遍历key
  • 四、关键字
    • 1、break
      • 1)双重/多层for循环中使用
      • 3)通过标签指定要结束的for循环
    • 2、continue
      • 1)双重/多层for循环中使用
      • 2)通过标签指定要continue的for循环
    • 3、goto
    • 4、return
  • 五、总结
    • 对比Java来看

一、前言

在这里插入图片描述

Go系列文章:

  1. GO开篇:手握Java走进Golang的世界
  2. 2 Go开发环境搭建、Hello World程序运行
  3. 3 Go编程规约和API包
  4. 4 Go的变量、常量、运算符
  5. 5 Go 基本数据类型
  6. 6 Go 复杂数据类型之指针
  7. 7 Go流程控制之分支结构if、switch

Go专栏传送链接:https://blog.csdn.net/saintmm/category_12326997.html

二、for循环

for 循环是一个循环控制结构,可以指定循环执行的次数
在这里插入图片描述

1、语法

Go的for循环有三种方式,仅有一种方式需要像Java一样使用分号。

1)和Java的for循环一样

  1. for init; condition; post {
  2. }
  • init: 给控制变量赋初值,一般为:赋值表达式;
  • condition: 循环控制条件,一般为:关系表达式或逻辑表达式;
  • post: 给控制变量增量或减量,一般为:赋值表达式。

示例:计算1 到 100 的数字之和:

  1. package main
  2. import "fmt"
  3. func main() {
  4. sum := 0
  5. for i := 1; i <= 100; i ++ {
  6. sum += i
  7. }
  8. fmt.Println(sum)
  9. }

控制台输出:
在这里插入图片描述

2)和Java的while一样

  1. for condition {
  2. }

init和post参数是可选的,针对上面的实例,我们可以省略它俩,这样的for循环语句就类似于while循环。

示例:当sum 小于 100事,计算sum自加的结果

  1. package main
  2. import "fmt"
  3. func main() {
  4. sum := 1
  5. for sum < 100 {
  6. sum += sum
  7. }
  8. fmt.Println(sum)
  9. }

控制台输出:
在这里插入图片描述

3)和Java的for(;;)一样

无限循环,也等价于while(true);

  1. for {
  2. }

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. sum := 0
  5. // 无限循环下去
  6. for {
  7. sum++
  8. }
  9. // 永远执行不到这条语句
  10. fmt.Println(sum)
  11. }

想要停止无限循环,在命令窗口按下ctrl + c 。

2、for语句执行过程

  1. 先执行赋值表达式,对变量赋初始化值;
  2. 执行condition表达式,判断赋值表达式init中的变量是否符合条件;

    • 符合循环条件,这执行循环体内的语句;然后执行post表达式,进入第二次循环。在判断condition。
    • 不符合循环条件,终止for循环,执行循环体之外的go语句。

三、for range

for range结构是Go语言特有的一种迭代结构,可以遍历数组、切片、字符串、map、通道,语法上类似于Java中的 foreach 语句。

1、语法

Go的for range循环有两种方式;

1)遍历key、value

  1. for key, value := range coll {
  2. .....
  3. }

示例:遍历字符串、数组

  1. package main
  2. import "fmt"
  3. func main() {
  4. // 遍历字符串
  5. str := "Hello World"
  6. for i, value := range str {
  7. fmt.Printf("第 %d 位 char 的值 = %c\n", i, value)
  8. }
  9. // 遍历数组
  10. numbers := [6]int{
  11. 1, 2, 3, 5}
  12. for i, num:= range numbers {
  13. fmt.Printf("第 %d 位 num 的值 = %d\n", i, num)
  14. }
  15. }

控制台输出:

在这里插入图片描述

只遍历value

只遍历value 和 遍历 key/value的唯一区别在于用标识符_接收key。

  1. for _, value := range coll {
  2. .....
  3. }

示例:遍历字符串

  1. package main
  2. import "fmt"
  3. func main() {
  4. // 遍历字符串的char值
  5. str := "Hello World"
  6. for _, value := range str {
  7. fmt.Printf("各位的 char值 = %c\n", value)
  8. }
  9. }

2)遍历key

遍历key仅需要接收key,不需要使用标识符_接收value。语法如下:

  1. for key := range coll {
  2. .....
  3. }

示例:遍历数组值

  1. package main
  2. import "fmt"
  3. func main() {
  4. // 遍历数组中的值
  5. numbers := [4]int{
  6. 1, 2, 3, 5}
  7. for num:= range numbers {
  8. fmt.Println(num)
  9. }
  10. }

控制台输出:
在这里插入图片描述

四、关键字

Go流程控制中常用的关键字有四个:break、continue、goto、return

1、break

break用于立即中断for循环。

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. sum := 0
  5. for i := 1; i <= 100; i ++ {
  6. sum += i
  7. if sum > 100 {
  8. fmt.Println("即将退出循环")
  9. break
  10. }
  11. }
  12. fmt.Println(sum)
  13. }

控制台输出:
在这里插入图片描述

1)双重/多层for循环中使用

双重for循环中,break只会影响到最近的for循环;

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. for i := 1; i <= 2; i++ {
  5. for j := i; j < 10; j++ {
  6. if j == 8 {
  7. fmt.Println("即将退出内层循环,开启下一个外层循环")
  8. break
  9. }
  10. fmt.Printf("i = %d, j = %d \n", i, j)
  11. }
  12. }
  13. fmt.Println("done")
  14. }

控制台输出:
在这里插入图片描述

3)通过标签指定要结束的for循环

break也可以通过for循环定义的标签,控制break对哪个for循环生效。

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. outerFor:
  5. for i := 1; i <= 2; i++ {
  6. for j := i; j < 10; j++ {
  7. if j == 8 {
  8. fmt.Println("即将退出外层循环")
  9. break outerFor
  10. }
  11. fmt.Printf("i = %d, j = %d \n", i, j)
  12. }
  13. }
  14. fmt.Println("done")
  15. }

控制台输出:
在这里插入图片描述

2、continue

continue用于控制结束本次 循环体的代码逻辑,继续进行for循环中的下一次循环体。

示例:统计1-10的总和,但是不加8

  1. package main
  2. import "fmt"
  3. func main() {
  4. sum := 0
  5. for i := 1; i <= 10; i++ {
  6. if i == 8 {
  7. fmt.Printf("sum总和不累加:%d \n", i)
  8. continue
  9. }
  10. sum += i
  11. }
  12. fmt.Println(sum)
  13. }

控制台输出:
在这里插入图片描述

1)双重/多层for循环中使用

双重for循环中,continue只会影响到最近的for循环;

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. for i := 1; i <= 2; i++ {
  5. for j := i; j < 10; j++ {
  6. if j == 8 {
  7. fmt.Printf("即将跳过当前循环体, i = %d, j = %d \n", i, j)
  8. continue
  9. }
  10. fmt.Printf("i = %d, j = %d \n", i, j)
  11. }
  12. }
  13. fmt.Println("done")
  14. }

控制台输出:
在这里插入图片描述

2)通过标签指定要continue的for循环

continue也可以通过for循环定义的标签,控制continue对哪个for循环生效。

示例:内层循环执行到j == 8时,continue外层循环,内存循环不再执行,这个和break一个效果;

  1. package main
  2. import "fmt"
  3. func main() {
  4. outerFor:
  5. for i := 1; i <= 2; i++ {
  6. for j := i; j < 10; j++ {
  7. if j == 8 {
  8. fmt.Printf("即将跳过当前循环体, i = %d, j = %d \n", i, j)
  9. continue outerFor
  10. }
  11. fmt.Printf("i = %d, j = %d \n", i, j)
  12. }
  13. }
  14. fmt.Println("done")
  15. }

控制台输出:

在这里插入图片描述

3、goto

Go语言中的的 goto 关键字可以无条件地让程序跳转到指定的行;通常 goto 关键字 与 条件语句一起使用,以实现条件转移能力。

然,在Go程序设计中不建议使用goto关键字,容易造成程序流程的混乱。

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. fmt.Println("Hello 1")
  5. fmt.Println("Hello 2")
  6. if 1 == 1 {
  7. goto label
  8. }
  9. fmt.Println("Hello 3")
  10. fmt.Println("Hello 4")
  11. label:
  12. fmt.Println("Hello 5")
  13. fmt.Println("Hello 6")
  14. }

控制台输出:
在这里插入图片描述

4、return

return关键字用于接收某一个函数;

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. for i := 1; i <=100; i ++ {
  5. fmt.Println(i)
  6. if i == 18 {
  7. return
  8. }
  9. }
  10. fmt.Println("done")
  11. }

控制台输出:
在这里插入图片描述

五、总结

go语言的for循环用于基本和Java一样;特殊注意continue / break 到指定for循环的用法。
go的for range可以理解为Java中的foreach。

对比Java来看

Go语言中,while(for true)、break、continue、return和Java中使用一样。

  • Java中的for后需要需要跟小括号(),Go中不需要;

Java中的for

  1. for (int i = 1; i < 10; i++) {
  2. ....
  3. }

Go中的for

  1. for i := 1; i < 10; i++ {
  2. ....
  3. }

发表评论

表情:
评论列表 (有 0 条评论,164人围观)

还没有评论,来说两句吧...

相关阅读