面试题答案
一键面试以下是一个示例代码,展示如何在Go语言中使用反射机制对接口值进行动态类型断言并转换为具体类型:
package main
import (
"fmt"
"reflect"
)
func main() {
var data []interface{}
data = append(data, 10) // int
data = append(data, "hello") // string
data = append(data, 3.14) // float64
for _, item := range data {
value := reflect.ValueOf(item)
switch value.Kind() {
case reflect.Int:
num := value.Int()
fmt.Printf("Integer: %d\n", num)
case reflect.String:
str := value.String()
fmt.Printf("String: %s\n", str)
case reflect.Float64:
f := value.Float()
fmt.Printf("Float: %f\n", f)
default:
fmt.Printf("Unsupported type: %v\n", value.Kind())
}
}
}
在上述代码中:
- 首先创建了一个包含不同类型数据的接口切片
data
。 - 使用
reflect.ValueOf
获取接口值的反射值。 - 通过
value.Kind()
判断值的类型。 - 根据不同的类型,使用反射值提供的方法获取具体类型的值,并进行相应处理。
这种方式可以在运行时动态地处理不同类型的数据,而无需在编译时明确知道接口值的具体类型。