[Go语言入门] 06 Go语言循环语句

06 Go语言循环语句

Go语言的循环语句只有for语句,没有其他语言中的while和do-while语句。

6.1 for循环

Go语言的for循环语句有3种形式。

  • 形式1:for init; condition; post {}

    和C语言的for一样。

  • 形式2:for condition {}

    和C语言的while一样。

  • 形式3:for {}

    和C语言的while(true)一样。


循环语句各部分说明:

  • init - 循环初始化,在循环开始之前执行。一般为赋值语句。
  • condition - 循环控件条件,在每轮循环开始之前执行。一般为关系表达式或逻辑表达式。
  • post - 循环后处理,在每轮循环完成之后执行。一般为赋值语句,给控制变量增量或减量。
  • {} - 循环体代码块,每轮循环所执行的代码在此。

循环语句的执行过程如下:

  1. 如果有init部分,先执行init;如果没有则直接进入步骤2。
  2. 如果有condition部分,则判断condition,为真进入步骤3,为假退出循环;如果没有condition部分,则直接进入步骤3。
  3. 执行循环体。之后,如果有post部分,则进入步骤4,如果没有post部分,则再次进入本步骤。
  4. 执行post,然后再次进入步骤2
    在这里插入图片描述

示例1:

/// 计算 1 到 10 的数字之和
package main

import "fmt"

func main() {
    sum := 0
    for i := 0; i <= 10; i++ {
        sum += i
    }
    fmt.Println(sum)	// 输出 55
}

示例2(没有init部分):

/// 计算 1 到 10 的数字之和
package main

import "fmt"

func main() {
        sum := 1
        for ; sum <= 10; {
                sum += sum
        }
        fmt.Println(sum)

        // 这样写也可以,更像 While 语句形式
        for sum <= 10{
                sum += sum
        }
        fmt.Println(sum)
}

6.2 for-range循环

Go语言支持for-range循环,可以对切片、map、数组、字符串等进行循环迭代。

package main

import "fmt"

func main() {
    var hello = "hello, world!"
    for idx, value := range hello {
        fmt.Println(idx, value)
    }
}

关于for-range循环的具体使用,等后面讲到切片、map、数组、等数据类型时再作讲解。


6.3 循环语句嵌套

循环语句的循环体中还有循环语句。

例如(打印九九乘法表):

package main

import "fmt"

func main() {
    for m:=1; m < 10; m++ {
        for n:=1; n <= m; n++ {
            fmt.Printf("%dx%d=%d ", n, m, n*m)
        }
        fmt.Println("")
    }
}

6.4 循环控制语句

break语句

用于语句用于终止某个语句块的执行。再循环语句中break语句用于跳出循环。

在学习switch语句的章节,也提到过break可以跳出当前switch分支,原理类似。

示例(break跳出循环):

/// 在变量 a 大于 15 的时候跳出循环:
package main

import "fmt"

func main() {
   var a int = 10

   for a < 20 {
      fmt.Printf("a 的值为 : %d\n", a);
      a++;
      if a > 15 {
         /* 使用 break 语句跳出循环 */
         break;
      }
   }
}

在多层嵌套的循环语句中,break可以通过标签指明要跳出的是哪一层的循环。

示例:

package main

import "fmt"

func main() {

    //label1:
    for i := 0; i < 4; i++ {
        label2:
        for j := 0; j < 5; j++ {
            if j == 2 {
                //break  //break默认会跳出最近的循环
                //break label1;
                break label2;
            }
            fmt.Println("j = ", j)
        }
    }
}

continue

continue语句用于结束本轮循环,继续执行下一轮循环。

continue语句有点像break语句,但是continue不跳出循环,而是执行下一轮循环。

continue语句出现在多层嵌套的循环语句中时,也可以通过标签指明要跳出的是哪一层的循环。

示例:

/// 在变量 a 等于 15 的时候跳过本次循环执行下一次循环:
package main

import "fmt"

func main() {
   var a int = 10

   /* for 循环 */
   for a < 20 {
      if a == 15 {
         /* 跳过此次循环 */
         a = a + 1;
         continue;
      }
      fmt.Printf("a 的值为 : %d\n", a);
      a++;    
   }  
}

goto

goto语句可以无条件的转移到程序中指定的行。

goto语句通常与条件语句配合使用。可用来实现条件转移、跳出循环体等操作。

但是,在Go程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。

示例:

package main

import "fmt"

func main() {

    fmt.Println(1);
    goto label1
    fmt.Println(2);
    fmt.Println(3);
    fmt.Println(4);

    label1:
    fmt.Println(5);
}

// 输出结果
// 1
// 5

Copyright@2022 , 359152155@qq.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时空旅客er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值