面试题答案
一键面试package main
import (
"fmt"
)
func doSomething(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("接收到的是整数,值为: %d\n", v)
case string:
fmt.Printf("接收到的是字符串,值为: %s\n", v)
default:
fmt.Printf("不支持的类型: %T\n", v)
}
}
代码原理解释
- 空接口定义:在Go语言中,空接口
interface{}
可以存储任何类型的值,因为它没有定义任何方法。 - 函数参数:
doSomething
函数接受一个空接口类型的参数i
,这意味着它可以接受任何类型的变量作为参数。 - 类型断言:在函数内部,使用
switch
语句结合类型断言i.(type)
来判断传入参数i
的实际类型。如果是int
类型,打印整数的值;如果是string
类型,打印字符串的值;如果是其他类型,则打印不支持的类型信息。这样通过同一个函数根据传入参数的不同类型做出不同行为,展示了多态性调用。