switch...case... 语句中的类型转换

switch语句对case表达式的结果类型有如下要求:

  • 要求case表达式的结果能转换为switch表示式结果的类型

并且如果switch或case表达式的是无类型的常量时,会被自动转换为此种常量的默认类型的值。比如整数1的默认类型是int, 浮点数3.14的默认类型是float64

func main() {
    func main() {
    value1 := [...]int8{0, 1, 2, 3, 4, 5, 6}
    switch 1 + 3 {
        case value1[0], value1[1]:
	    fmt.Println("0 or 1")
        case value1[2], value1[3]:
	    fmt.Println("2 or 3")
        case value1[4], value1[5], value1[6]:
	    fmt.Println("4 or 5 or 6")
        }
    }
}

switch 表达式的结果是int类型,case表达式的结果是int8类型,而int8不能转换为int类型,所以上述会报错误

./main.go:10:1: invalid case value1[0] in switch on 1 + 3 (mismatched types int8 and int)
posted @ 2019-01-10 20:47  yihailin  阅读(1293)  评论(0)    收藏  举报