go switch语法

switch语法

在go中,switch可以支持传入各种类型进行选择,从实现上来说相当于从第1个case到最后一个case遍历进行比较,执行最先满足条件的case
并且go语言还规定必须要显式写明fallthrough语句才会接着执行下一个case,不用再写break了。这样其实更合理一些,因为绝大部分情况都是这个语义的,何必再在每个case里面写上break呢。

func main() {
	var weakDay string
	fmt.Scan(&weakDay)
	switch weakDay {
	case "Mon.":
		fmt.Println(1)
	case "Tues.":
		fmt.Println(2)
	case "Wed.":
		fmt.Println(3)
	case "Thurs.":
		fmt.Println(4)
	case "Fri.":
		fmt.Println(5)
	case "Sat.":
		fmt.Println(6)
	case "Sun.":
		fmt.Println(7)
	default:
		panic("wrong day")
	}
}

支持一个case里面多种情况。

func main() {
	var weakDay string
	fmt.Scan(&weakDay)
	switch weakDay {
	case "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.":
		fmt.Println("work day")
	case "Sat.", "Sun.":
		fmt.Println("weakend")
	default:
		panic("wrong day")
	}
}

可以不传入参数,替代繁琐的if else写法。这里每个case挨个判断,进入最先满足条件的case执行。

func main() {
	var score int
	fmt.Scan(&score)
	switch {
	case score < 60:
		fmt.Println("不及格")
	case score >= 60 && score < 80:
		fmt.Println("不错")
	case score >= 80:
		fmt.Println("优秀")
	default:
		panic("wrong number")
	}
}

type switch

type switch是go语言中一种特殊的switch语法,它比较的是类型而不是具体的值。
和普通的类型断言一样,要求进行断言的变量是接口类型的。并且在type switch中不允许使用fallthrough语句。

	switch x.(type) {
	case nil:
		doSomeThing()
	case Type1:
		doSomeThing()
	case Type2:
		doSomeThing()
	default:
		doSomeThing()
	}

为了方便进行类型转换,type switch还可以设定一个值来提前保存转换之后得到的值。

	switch value := x.(type) {
	case nil:
		doSomeThing()
	case Type1:
		doSomeThing(value)
	case Type2:
		doSomeThing(value)
	default:
		doSomeThing(value)
	}

参考资料

原文地址:https://www.cnblogs.com/HachikoT/p/15782328.html