题目:
下面这段代码能否编译通过?如果可以,输出什么?
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | func GetValue() int {return 1
 }
 
 func main() {
 i := GetValue()
 switch i.(type) {
 case int:
 println("int")
 case string:
 println("string")
 case interface{}:
 println("interface")
 default:
 println("unknown")
 }
 }
 
 | 
答案解析
	该代码无法编译通过。
原因是在 switch i.(type) 语句中,i 是一个普通的 int 类型变量,而 i.(type) 只能用于接口类型的断言。因此,编译器会报错。
	如果想要判断一个变量的类型,可以使用 reflect 包来实现。以下是修改后的代码示例:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | import ("fmt"
 "reflect"
 )
 
 func GetValue() int {
 return 1
 }
 
 func main() {
 i := GetValue()
 switch reflect.TypeOf(i).Kind() {
 case reflect.Int:
 fmt.Println("int")
 case reflect.String:
 fmt.Println("string")
 default:
 fmt.Println("unknown")
 }
 }
 
 | 
以下解析来自 Go语言中文网
	编译失败。考点:类型断言,类型断言的语法形如:i.(type),其中 i 是接口,type 是固定关键字,需要注意的是,只有接口类型才可以使用类型断言。