7-Golang流程控制---条件语句switch

switch

switch语句基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。
switch语句由上往下执行,直到找到匹配项,匹配项后面也不需要再加 break。
switch默认情况下case最后自带break语句,匹配成功后就不会执行其他case,如需执行后面的case,可以使用fallthrough
default不论放在哪都是最后执行。语法如下:

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。

可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。

switch{
    case 1,2,3,4:
    default:
}

示例:

package main

import "fmt"

func main() {
    grade := "B"
    marks := 90
    switch marks {
    case 90:
        grade = "A"
    case 80:
        grade = "B"
    case 70, 60:
        grade = "C"
    default:
        grade = "D"
    }

    switch {
    case grade == "A":
        fmt.Printf("优秀!\n")
    case grade == "B", grade == "C":
        fmt.Printf("及格\n")
    default:
        fmt.Printf("不及格\n")
    }
    fmt.Printf("你的等级是 %s\n", grade)
}

使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true

package main

import "fmt"

func main() {

    switch {
    case false:
        fmt.Println("1、case 条件语句为 false")
        fallthrough
    case true:
        fmt.Println("2、case 条件语句为 true")
        fallthrough
    case false:
        fmt.Println("3、case 条件语句为 false")
        fallthrough
    case true:
        fmt.Println("4、case 条件语句为 true")
    case false:
        fmt.Println("5、case 条件语句为 false")
        fallthrough
    default:
        fmt.Println("6、默认 case")
    }
}

switch 从第一个判断表达式为 true 的 case 开始执行,如果 case 带有 fallthrough,程序会继续执行下一条 case,且它不会去判断下一个 case 的表达式是否为 true。

练习:

package main

import "fmt"

func main() {
    var yes string
    fmt.Print("有卖西瓜的吗?(Y/N)")
    fmt.Scan(&yes)

    fmt.Println("老婆的想法:")
    fmt.Println("十个包子")
    switch yes {
    case "y", "Y":
        fmt.Println("买一个西瓜")
    }

    fmt.Println("老公的想法:")
    switch yes {
    case "y", "Y":
        fmt.Println("一个包子")
    default:
        fmt.Println("十个包子")
    }

    var score int
    fmt.Print("请输入成绩: ")
    fmt.Scan(&score)

    switch {
    case score >= 90:
        fmt.Println("A")
    case score >= 80:
        fmt.Println("B")
    case score >= 70:
        fmt.Println("C")
    case score >= 60:
        fmt.Println("D")
    default:
        fmt.Println("E")
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容