golang流程之分支控制

流程介绍

在程序中,程序运行的流程控制决定程序是如何进行的,主要有三大类

  1. 顺序控制
  2. 分支控制
  3. 循环控制

顺序控制

不存在判断和跳转,完全按照代码顺序进行

分支控制

分支控制就是让程序有选择的进行

  1. 单分支
  2. 双分支
  3. 多分支
  4. 嵌套分支
  5. switch分支结构
    分支结构,不管是哪种,都只有执行其中一个代码块,或者全部不执行,不可能存在执行多个代码块的情况
单分支

结构:
if 条件表达式 {
执行语句块
}
当条件表达式为true时,才执行执行语句块
golang中这对{}是必须要有的,不像一些语言在只写一行代码时可以省略
golang中的if语句有个奇怪的特点,就是可以在条件表达式中声明一个变量。

双分支

结构:
if 条件表达式 {
执行语句块1
}else{
执行语句块2
}
重点强调golang的else必须紧跟在if的下括号后面
func main() {
// fmt.Scanln(&age)
if age := 20; age > 18 {
fmt.Println(“成年人”)
} else {
fmt.Print(“未成年”)
}
}
在此段代码中,如果if中的条件表达式为true,则输出成年人,如果为false,则输出未成年

多分支

if 条件表达式1 {
执行语句块1
}else if 条件表达式2 {
执行语句块2
}else{
执行语句块3
}
代码示例:
var num1 = 10
var num2 = 20
if numsum1 := num1 + num2; numsum1 < 10 {
fmt.Println(“1”)
} else if numsum1 < 20 {
fmt.Println(“2”)
} else if numsum1 < 30 {
fmt.Println(“3”)
} else {
fmt.Println(“4”)
}

注意事项

var b =true
if b=false{
fmt.Println(“1”)
}else{
fmt.Println(“2”)
}
在其它语言中可能可以输出2
但是,这样的语句在golang中是会报错的,报错原因是:cannot use assignment b = false as value
就是说golang的if后面必须跟的是条件表达式!!!
而且在golang中,你改成b==false,系统还是会建议你改成!b这样子的形式,更简洁

嵌套分支

如果在一个完整的分支结构中,又存在一个完整的分支结构,则称为嵌套分支。
结构:
if …{
if…{

}
}else{

}

switch分支

基本介绍:

  1. 在不断寻找匹配项,执行匹配项的代码
  2. 匹配项后面不需要加上break(与其它语言有所区别)因为golang默认在每个case后加上break
    结构:
    switch 表达式{
    case 表达式1,表达式2,…:
    语句块1
    case 表达式3,表达式4,…:
    语句块2

    default:
    语句块
    }
    只要匹配到表达式1或者表达式2,就能够执行语句块1
switch的使用细节
  1. case后面跟的是表达式(即:常量值,变量,一个有返回值的函数等)
  2. case后各个表达式的类型必须和switch后面表达式的类型一致
  3. case后的多个表达式用逗号间隔
  4. case后的表达式如果是常量值,要求不能重复(在所有的case后的常量都不能重复)
    但是,如果一个常量是5,一个变量虽然也是被赋值为5,但是这可以正常运行
  5. case后不需要break,匹配项结束后,switch分支就结束,没有匹配项就执行default
  6. default语句不是必须的
  7. switch后面可以不加任何的表达式,就完全当作if-else语句来进行使用
    代码用例:
    var a int =9
    switch {
    case a == 10, a == 9:
    fmt.Println(“1”)
    default:
    fmt.Println(“2”)
    }
  8. switch后面可以直接声明或者定义一个变量,以分号结尾(不常用不推荐,做了解)
    switch a :=9;{
    case a == 10, a == 9:
    fmt.Println(“1”)
    default:
    fmt.Println(“2”)
    }
  9. switch穿透fallthrough,如果在case的执行代码块的末尾加上fallthrough,就会在执行完这个语句后执行下一个case或者default,只能穿透一层。
    注意:fallthrough只能加在每个case执行语句块的末尾
    代码示例
    switch a := 9; {
    case a == 10, a == 9:
    fmt.Println(“1”)
    fallthrough
    default:
    fmt.Println(“2”)
    }
  10. switch还可以用type-switch来判断interface变量实际指向的数据类型
    代码示例
    var x interface{}
    var y = 10.9
    x = y
    switch x.(type) {
    case nil:
    fmt.Println(“0”)
    case int:
    fmt.Println(“1”)
    case float64:
    fmt.Println(“2”)
    case bool:
    fmt.Println(“3”)
    }
switch和if的区别

switch分支适用于在具体数字不多,而且是int,float型的情况
if分支使用于范围判断的,和bool型(并且if的适用范围更广)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值