switch语句

switch语法格式 #

switch 变量 {
  case 值1: 
    代码
  case 值2: 代码2
  case 值3,值4,值N : 
    代码N,case也支持多个值,多个之间用逗号分隔
  default: 默认代码块
}

switch 初始语句;变量 {
  case 值1:
    代码
  case 值2: 代码2
  case 值3,值4,值N :
    代码N,case也支持多个值,多个之间用逗号分隔
  default: 默认代码块
}

//case使用条件表达式,则switch后无变量,case也支持多个表达式,多个之间用逗号分隔
switch {
  case 条件表达式1:
     代码
  case 条件表达式2:
     代码
  case 条件表达式3, 条件表达式4,条件表达式N :
     代码
  default:
     默认代码块
}

//type switch类型格式,且该语法不能使用fallthrough语句
switch 接口类型变量名.(type){
    case 数据类型名:
        //代码块
    case 数据类型名N:
       //代码块
    default: //可选
       //代码块
}

备注: go中的 switch 不需要手动 break语句,默认就是自动加上break的,
     只有在case中明确指定fallthrough关键字才继续执行紧跟的case语句。

switch语句示例 #

var grade string = "B"

switch marks {
  case 90: grade = "A"
  case 80: grade = "B"
  case 50,60,70 : grade = "C"  //case可以多个值
  default: grade = "D"
}

switch n := 6; n {
	case 1, 3, 5, 7, 9:
		fmt.Println("奇数")
	case 2, 4, 6, 8:
		fmt.Println("偶数")
	default:
		fmt.Println(n)
}
//case使用条件表达式,case也支持多个表达式,多个之间用逗号分隔
switch {
  case grade == "A" :
     fmt.Printf("优秀!\n" )
  case grade == "B", grade == "C" :
     fmt.Printf("良好\n" )
  case grade == "D" :
     fmt.Printf("及格\n" )
  case grade == "F":
     fmt.Printf("不及格\n" )
  default:
     fmt.Printf("差\n" );
}
fmt.Printf("你的等级是 %s\n", grade );


switch类型断言示例:
    var x interface{}  //定义interface类型变量,即存储任意类型的数据变量
      x = 123   //给x变量赋值
   switch i := x.(type) {
      case nil:
         fmt.Printf(" x 的类型 :%T",i)
      case int:
         fmt.Printf("x 是 int 型")
      case float64:
         fmt.Printf("x 是 float64 型")
      case func(int) float64:
         fmt.Printf("x 是 func(int) 型")
      case bool, string:
         fmt.Printf("x 是 bool 或 string 型" )
      default:
         fmt.Printf("未知型")
   }

//fallthrough示例
var s ="hello"
switch {
    case s == "hello":
        fmt.Println("hello")
        fallthrough
    case s != "world":
        fmt.Println("world")
    case s!="123":
    fmt.Println("123")
}
/**打印结果如下:
hello
world
*/

var s =1
switch {
case s == 1:
    fmt.Println("1")
    fallthrough
case s == 2:
    fmt.Println("2")
case s==3:
    fmt.Println("3")
}
/**打印结果如下:
1
2
*/

switch高级示例 #

time包的类型别名及常量思想
type Weekday int
const (
	Sunday Weekday = iota
	Monday
	Tuesday
	Wednesday
	Thursday
	Friday
	Saturday
)

switch time.Now().Weekday() {
    case time.Saturday, time.Sunday:
        fmt.Println("今天是周末")
    default:
        fmt.Println("今天是工作日")
}

Build by Loppo 0.6.15