乐趣区

关于go:Go-快速入门指南-switch

概述

相较于支流编程语言,Go 中的 switch 语法更加灵便,它承受任意模式的表达式。

语法规定

  • switch 前面的表达式不须要括号
  • case 语句块执行完会主动退出整个 switch 语句块,也就是不须要应用 break 显式申明
  • case 语句快执行完后,如果心愿持续向下执行,能够应用关键字 fallthrough, 这样就和其余编程语言不加 break 成果一样了
switch expr {   // expr 能够是任意类型
  case v1:
      ...
  case v2:
      ...
  case v3:
      ...
  case v4, v5, v6:    // 能够同时测试多个可能符合条件的值
      ...
  default:  // 默认值
      ...
}

例子

一般表达式

package main

import "fmt"

func main() {
    n := 1024
    switch n {
    case 1023:
        fmt.Println("n = 1023")
    case 1024:
        fmt.Println("n = 1024")
    case 1025:
        fmt.Println("n = 1025")
    }
}

// $ go run main.go
// 输入如下 
/**
  n = 1024
*/

运算表达式

package main

import "fmt"

func main() {
    n := 1024
    switch n * 2 {
    case 1024:
        fmt.Println("n = 1024")
    case 2048:
        fmt.Println("n = 2048")
    case 0:
        fmt.Println("n = 0")
    }
}

// $ go run main.go
// 输入如下 
/**
  n = 2048
*/

default

package main

import "fmt"

func main() {
    n := 1024
    switch n * 2 {
    case 0:
        fmt.Println("n = 0")
    case 1:
        fmt.Println("n = 1")
    case 2:
        fmt.Println("n = 2")
    default:
        fmt.Println("n = 2048")
    }
}

// $ go run main.go
// 输入如下 
/**
  n = 2048
*/

省略 expr 表达式

package main

import "fmt"

func main() {
    n := 1024
    switch {
    case n < 1024:
        fmt.Println("n < 1024")
    case n > 1024:
        fmt.Println("n > 1024")
    case n == 1024:
        fmt.Println("n == 1024")
    default:
        fmt.Println("invalid n")
    }
}

// $ go run main.go
// 输入如下 
/**
  n = 1024
*/

同时测试多个 case

package main

import "fmt"

func main() {
    n := 1024
    switch n {
    case 1023, 1024: // 多个 case, 只有一个匹配就 OK
        fmt.Println("n <= 1024")
    case 1025:
        fmt.Println("n > 1024")
    default:
        fmt.Println("invalid n")
    }
}

// $ go run main.go
// 输入如下 
/**
  n <= 1024
*/

fallthrough

package main

import "fmt"

func main() {
    n := 1024
    switch {
    case n < 1024:
        fmt.Println("n < 1024")
        fallthrough // 持续向下执行
    case n > 1024:
        fmt.Println("n > 1024")
        fallthrough // 持续向下执行
    case n == 1024:
        fmt.Println("n == 1024")
        fallthrough // 持续向下执行
    default:
        fmt.Println("invalid n")
    }
}

// $ go run main.go
// 输入如下 
/**
  n = 1024
  invalid n
*/

类型断言

switch 能够 .(type) 来实现类型断言,判断某个值是否为某个数据类型。

package main

func main() {var n interface{} // 值必须为 interface 类型
    n = 1024

    switch n.(type) {
    case nil:
        println("n is a nil")
    case int:
        println("n is a integer")
    case float64:
        println("n is a float64")
    case bool:
        println("n is a bool")
    case string:
        println("n is a string")
    default:
        println("n is invalid")
    }
}

// $ go run main.go
// 输入如下 
/**
  n is a integer
*/

对于下面代码正文中提到的 interface, 前面会讲到, 读者这里只需晓得关键字 interface 代表接口类型即可。

分割我

退出移动版