Go语言的条件控制语句及循环语句的学习笔记

一、Go的条件控制语句

Go 语言提供了以下几种条件判断语句:

语句描述
if 语句if 语句 由一个布尔表达式后紧跟一个或多个语句组成。
if…else 语句if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。
if 嵌套语句你可以在 ifelse if 语句中嵌入一个或多个 ifelse if 语句。
switch 语句switch 语句用于基于不同条件执行不同动作。
select 语句select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

在GO语言中,没有三目运算符

1. if

if 布尔表达式 {
    // ....布尔表达式为true,则执行方法体
}

2. if else

if 布尔表达式 {
    // .....布尔表达式为true,则执行方法体
}  else {
    // .....布尔表达式为false,则执行方法体
}

3. if 嵌套

if 布尔表达式 1 {
   /* 在布尔表达式 1 为 true 时执行 */
   if 布尔表达式 2 {
      /* 在布尔表达式 2 为 true 时执行 */
   }
}

4. switch

switch varl {
    case val1 :
        ...
    case val2 :
        ...
    	fallthrough
    case val3 :
        ...
    defalut : 
    	...
}

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。

switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加 break。

与其他高级语言的不同部分:

switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用fallthrough

比如,下面的例子:

var b int = 10
switch b {
case 10:
	fmt.Printf("hihihi,10\n")
	fallthrough
case 20:
	fmt.Printf("saysaysay,20\n")
default:
	fmt.Printf("default !\n")
}

在这里插入图片描述

5. select

select 是 Go 中的一个控制结构,类似于 switch 语句。select 语句只能用于通道操作,每个 case 必须是一个通道操作,要么是发送要么是接收。select 语句会监听所有指定的通道上的操作,一旦其中一个通道准备好就会执行相应的代码块。

如果多个通道都准备好,那么 select 语句会随机选择一个通道执行。如果所有通道都没有准备好,那么执行 default 块中的代码

select {
  case <- channel1:
    // 执行的代码
  case value := <- channel2:
    // 执行的代码
  case channel3 <- value:
    // 执行的代码

    // 你可以定义任意数量的 case

  default:
    // 所有通道都没有准备好,执行的代码
}
  • 每个 case 都必须是一个通道

  • 所有 channel 表达式都会被求值

  • 所有被发送的表达式都会被求值

  • 如果任意某个通道可以进行,它就执行,其他被忽略。

  • 如果有多个 case 都可以运行,select 会随机公平地选出一个执行,其他不会执行。

    否则:

    1. 如果有 default 子句,则执行该语句。
    2. 如果没有 default 子句,select 将阻塞,直到某个通道可以运行;Go 不会重新对 channel 或值进行求值。

二、Go的循环语句

Go语言中没有提供while关键字来进行循环,只提供了for

for 循环

  • init: 一般为赋值表达式,给控制变量赋初值;

  • condition: 关系表达式或逻辑表达式,循环控制条件;

  • post: 一般为赋值表达式,给控制变量增量或减量。

1.1 for 的 一般模式

for init; condition; post{
    /*方法体*/
}

1.2 for的简写==>类似while的写法

for condition{
    /*方法体
    break
    */
}

1.3 for的一般模式的简写形式

for;;{
     /*方法体*/
}

1.4 for的k-v(for-each写法)

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环

tip:下面的写法中,[ slice | map | 数组 | 字符串 ]为任意选择的复合数据类型。

// 1. 获取key和value
for key,value := range [ slice | map | 数组 | 字符串 ] {
    fmt.Printf("key:%v==>value:%v",key,value)
}
// 2. 单独获取key
for key := range [ slice | map | 数组 | 字符串 ] {
    fmt.Printf("key",key)
}
// 单独获取key的另一种写法
for key ,_ := range [ slice | map | 数组 | 字符串 ]{
    fmt.Printf("key",key)
}
// 3. 单独获取value
for _,value := range [ slice | map | 数组 | 字符串 ]{
    fmt.Printf("value",value)
}

1.5 for 的 嵌套使用

嗯~ o( ̄▽ ̄)o,就是for循环嵌套,格式如下:

for [condition |  ( init; condition; increment ) | Range]
{
   for [condition |  ( init; condition; increment ) | Range]
   {
      statement(s);
   }
   statement(s);
}

例如,打印九九乘法表

for i := 1; i < 10; i++ {
    for j := 1; j <= i; j++ {
        fmt.Printf("%d*%d=%d\t", i, j, i*j)
    }
    println()
}

在这里插入图片描述

break、continue、goto

循环控制语句可以控制循环体内语句的执行过程。

GO 语言支持以下几种循环控制语句:

控制语句
break经常用于中断当前 for 循环或跳出 switch 语句
continue跳过当前循环的剩余语句,然后继续进行下一轮循环。
goto将控制转移到被标记的语句。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杀死一只知更鸟debug

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

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

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

打赏作者

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

抵扣说明:

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

余额充值