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语句。

package main

import (
	"fmt"
)

type person struct {
	age  int
	name string
}

func guessType(x interface{}) {
	value := x.(person)
	fmt.Println(value)
	switch x.(type) {
	case int:
		fmt.Println("int")
	case string:
		fmt.Println("string")
	case person:
		fmt.Println("person")
	default:
		fmt.Println("unknown")
	}
}

func main() {
	var n int
	var str string
	var p person
	guessType(n)   // int
	guessType(str) // string
	guessType(p)   // person
}

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

package main

import (
	"fmt"
)

type person struct {
	age  int
	name string
}

func guessType(x interface{}) {
	switch value := x.(type) {
	case int:
		fmt.Println("int ", value)
	case string:
		fmt.Println("string ", value)
	case person:
		fmt.Println("person ", value)
	default:
		fmt.Println("unknown ", value)
	}
}

func main() {
	var n int
	var str string = "hello"
	var p person
	guessType(n)   // int 0
	guessType(str) // string hello
	guessType(p)   // person {0 }
	guessType(nil) // person <nil>
}

参考资料

posted @ 2022-01-09 21:27  HachikoT  阅读(1433)  评论(0编辑  收藏  举报