Go 流程控制语句

目录

if

if-else if-else

if 的嵌套

switch

swithc_type

for

for range

break、continue

goto与label


if

条件满足,执行相应逻辑块里面的代码,条件不满足,不执行逻辑块代码,继续向下执行

语法

if 条件表达式 {

        逻辑体

}

示例1

if 3 > 5 {
	fmt.Println("进来了。。。")
}

说明

  • 条件表达式成立,会执行逻辑体。
  • 条件表达式不需要加 () 括号。
  • "{" 必须紧跟在条件表达式后面,不能另起一行。

示例2

if a, b, c := 1, 2, 3; a > b || b < c {
	fmt.Println("进来了。。。")
}

说明

  • 条件表达式中可以含有变量或常量
  • if语句中允许包含仅一个分号,在分号前初始化一些局部变量(即只在if块内可见)

if-else if-else

  • 条件表达式满足执行逻辑块里面的代码,剩下的 if else if else 块中的代码不执行。如果条件都不满足,执行最后一个else块中的逻辑代码。
  • else if 可以有0个或多个连续的
  • else 可以有0个或一个在最后

语法

if 条件表达式 {

        逻辑块

} else if 条件表达式 {

        逻辑块

} else if 条件表达式 {

        逻辑块

} else {

        逻辑块

}

示例

var a = 10
if a == 1 {
	fmt.Println("a=1")
} else if a == 2 {
	fmt.Println("a=2")
} else if a == 3 {
	fmt.Println("a=3")
} else {
	fmt.Println(a)
}

if 的嵌套

var a, b = 10, 20
if a == 10 {
	if a > b {
		fmt.Println("a>b")
	} else {
		fmt.Println("a<b")
	}
} else {
    fmt.Println(a)
}

switch

满足条件是执行对应的逻辑块代码,都不满足时执行default逻辑块里的代码

语法

switch 变量 {

        case 值1:

                逻辑块

                fallthrough

        case 值2:

                逻辑块

        default:

                逻辑块

}

示例

var a = 10
switch a {
case 1:
	fmt.Println("a=1")
case 2:
	fmt.Println("a=2")
default:
	fmt.Println(a)
}

说明

  • case 块可以有0个或多个连续的
  • default 块可以有0个或一个在最后
  • switch-case-default 可以模拟 if-else if-else,但只能实现相等判断
  • switch和case后面可以跟常量、变量或函数表达式
  • case后面可以跟多个值,只要有一个值满足就行
  • switch后面如果是空的,那么case可以写条件表达式
  • fallthrough,case块中如果带了fallthrough,则执行完case代码后还会执行下一个case块代码

swithc_type

var num interface{} = "10"
switch num.(type) {
case int:
	fmt.Println("int")
case float32:
	fmt.Println("float32")
case float64:
	fmt.Println("float64")
case byte, string:
	fmt.Printf("%v \n", num)
}

for

循环语句

语法

for 初始化局部变量; 条件表达式; 增减操作 {

        代码块

}

示例

for i := 0; i < 10; i++ {
	fmt.Println(i)
}

说明

  • 执行顺序,先执行局部变量初始化,在执行条件表达式,如果满足,执行代码块,再执行增减操作。再执行条件表达式,依次循环。
  • for变体写法:初始化变量可以放在for上面,增减操作可以放在for代码块中,只有条件判断跟在for后面时,前后的分号可以不要。也可以for后面跟{括号写成死循环,for{代码块}

for range

循环集合,for range拿到的是数据的拷贝

  • 遍历数组或切片
    • for i, value := range arr
  • 遍历string
    • for i, value := range str 
  • 遍历map,go不保证遍历的顺序
    • for key, value := range map
  • 遍历channel,遍历前要先close
    • for value:= range channel

break、continue

break:退出for循环,且for循环中break下面的代码不再执行。

continue:跳出循环,continue下面的代码不再执行。进行下一轮循环


goto与label

语法

标记:
    代码块
    goto 标记

示例1

label:
	fmt.Println("a")
	goto label

说明

从上到下执行,执行到 goto label 的时候,跳转到上面 label 的地方开始重新执行,进入无限循环中

示例2

	if true {
		goto L1
	} else {
		goto L2
	}
	fmt.Println("我会被跳过")
L1:
	fmt.Println("L1")
L2:
	fmt.Println("L2")
	fmt.Println("我会执行")

 说明

  • label 也可以写在 goto下面。
  • 执行到 goto 代码的时候,直接跳转到 标记的地方,中间的代码被跳过不会执行。
  • label 指定的只是某一行代码,并不是一个代码块,所以 goto L1执行后,会接着执行goto L2和后面的代码。

示例3

	for i := 0; i < 10; i++ {
		fmt.Println("i")
		for j := 0; j < 10; j++ {
			goto L1
		}
	}
L1:
	fmt.Println("最外层")

说明

goto label 结合可以跳转到最外层的for循环


全套教程地址:Golang全套教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

7 号

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

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

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

打赏作者

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

抵扣说明:

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

余额充值