面试题答案
一键面试示例代码
package main
import (
"fmt"
)
// 定义一个函数,接受空接口作为参数
func printValue(value interface{}) {
switch v := value.(type) {
case int:
fmt.Printf("The value is an int: %d\n", v)
case string:
fmt.Printf("The value is a string: %s\n", v)
default:
fmt.Printf("Unsupported type\n")
}
}
你可以使用以下方式调用这个函数:
func main() {
printValue(10)
printValue("Hello, World!")
}
优势
- 灵活性:可以接受任何类型的参数,极大地提高了函数的通用性。例如在编写一些通用的工具函数,如日志记录函数,它可以接受任意类型的数据进行记录,不需要为每种类型都编写一个单独的函数。
- 减少代码重复:避免为不同类型参数编写重复的函数逻辑。比如上述
printValue
函数,如果不使用空接口,就需要针对int
、string
等不同类型分别编写打印函数。
劣势
- 类型安全问题:在运行时才能确定实际的类型,可能导致运行时错误。例如如果在
printValue
函数中错误地将一个string
类型当作int
类型进行数学运算,编译器无法在编译时发现这个错误。 - 性能损耗:由于类型断言等操作需要在运行时进行,相比编译时就确定类型的参数传递方式,会带来一定的性能开销。特别是在性能敏感的场景下,这种开销可能会比较明显。