MST

星途 面试题库

面试题:Go中反射获取基础类型时如何处理空指针

在Go语言反射中,如果有一个指向基础类型的指针变量,且该指针为nil,当使用反射获取其基础类型信息时会发生什么?如何正确处理这种情况,给出相应的代码示例。
38.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 发生情况: 当使用反射获取一个指向基础类型且为nil的指针变量的基础类型信息时,会导致运行时恐慌(panic),错误信息类似于reflect: call of reflect.Value.Type on zero Value。这是因为反射包期望一个有效的reflect.Value实例,而nil指针对应的reflect.Value是零值。
  2. 正确处理方式及代码示例
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,以确保安全获取基础类型信息。