Go Switch 语句的5个模式

lryong · · 1238 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

基本用法

  • switch 关键字后面接条件表达式
  • case 从上到下按顺序进行匹配,直到匹配成功
  • 如果没有匹配到 case, 且有 default 模式, 会执行 default 的代码块
func defaultSwitch() {
    switch time.Now().Weekday() {
    case time.Saturday:
        fmt.Println("Today is Saturday.")
    case time.Sunday:
        fmt.Println("Today is Sunday.")
    default:
        fmt.Println("Today is a weekday.")
    }
}

没有条件表达式

switch关键字后没有条件表达式, 默认认为是 true

func noConditionSwitch() {
    hour := time.Now().Hour()
    switch {
    case hour < 12:
        fmt.Println("Good morning!")
    case hour < 17:
        fmt.Println("Good afternoon!")
    default:
        fmt.Println("Good evening!")
    }
}

Or 匹配

func orSwitch() {
    c := '\t'
    var iswhiteSpace bool
    switch c {
    case ' ', '\t', '\n', '\f', '\r':
        iswhiteSpace = true
    }
    if iswhiteSpace {
        fmt.Println("c is a white_space char")
    }

}

Fallthrough

  • fallthrough 语句会跳到下一个 case
  • 只能放在 case代码块的最后位置
func fallthroughSwitch() {
    switch 2 {
    case 1:
        fmt.Println("1")
        fallthrough
    case 2:
        fmt.Println("2")
        fallthrough
    case 3:
        fmt.Println("3")
    }
}

通过 break 退出 switch

  • break 语句终止 switch 继续执行
  • 如果要跳出外层的 for 循环,而不是 switch,可以在循环上加一个标签,然后 break 到这个标签
func breakSwitch() {
Loop:
    for _, ch := range "a b\nc" {
        switch ch {
        case ' ': // skip space
            break
        case '\n': // break at newline
            break Loop
        default:
            fmt.Printf("%c\n", ch)
        }
    }
}

执行顺序

  • switch 表达式一开始会被执行
  • 之后 case 表达式从左到右、从上到下匹配:

    1. 第一个相等的 case, 会触发匹配到的代码块的执行
    2. 其他 case 会被忽略
func executeOrder() {
    // Foo prints and returns n.
    var Foo func(int) int
    Foo = func(n int) int {
        fmt.Println(n)
        return n
    }

    switch Foo(2) {
    case Foo(1), Foo(2), Foo(3):
        fmt.Println("First case")
        fallthrough
    case Foo(4):
        fmt.Println("Second case")
    }
}

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:lryong

查看原文:Go Switch 语句的5个模式

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1238 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传