面试题答案
一键面试package main
import (
"fmt"
)
func process(i interface{}) (interface{}, error) {
switch v := i.(type) {
case int:
// 处理int类型逻辑
return v * 2, nil
case string:
// 处理string类型逻辑
return v + " processed", nil
default:
return nil, fmt.Errorf("unsupported type %T", i)
}
}
在实际应用中可能遇到的类型转换问题及解决方法:
- 类型断言失败:如果在类型断言时,实际类型与断言的类型不匹配,会导致运行时错误。例如在上述代码中,如果传入的实际类型既不是
int
也不是string
,则会返回错误。解决方法是使用类型断言的comma-ok形式,如v, ok := i.(int)
,通过ok
判断断言是否成功,若失败则可以进行相应处理,如返回错误。 - 接口嵌套:当空接口参数中嵌套了其他接口时,进行类型断言会变得复杂。需要先将外层接口断言成功后,再对内部接口进行断言。
- 性能问题:过多的类型断言会影响性能,因为每次断言都需要在运行时检查类型。在实际应用中,如果可能,可以尽量在设计阶段减少空接口的使用,提前确定类型,或者通过多态来实现不同逻辑,而不是依赖运行时的类型断言。