面试题答案
一键面试- 发生情况:
当使用反射获取一个指向基础类型且为
nil
的指针变量的基础类型信息时,会导致运行时恐慌(panic
),错误信息类似于reflect: call of reflect.Value.Type on zero Value
。这是因为反射包期望一个有效的reflect.Value
实例,而nil
指针对应的reflect.Value
是零值。 - 正确处理方式及代码示例:
package main
import (
"fmt"
"reflect"
)
func main() {
var num *int
if num == nil {
fmt.Println("指针为nil,无法获取基础类型信息")
return
}
value := reflect.ValueOf(num)
if value.Kind() == reflect.Ptr && value.IsNil() {
fmt.Println("指针为nil,无法获取基础类型信息")
return
}
typeInfo := value.Elem().Type()
fmt.Printf("基础类型信息: %v\n", typeInfo)
}
上述代码首先判断指针是否为nil
,如果是则直接返回,避免反射操作引发恐慌。另外还通过反射的IsNil
方法再次判断指针是否为nil
,以确保安全获取基础类型信息。