MST

星途 面试题库

面试题:Go中判断空接口是否为nil的常见误区

在Go语言中,声明一个空接口变量并赋值为nil,然后通过一个函数传递这个空接口变量,在函数内部判断该空接口是否为nil,代码如下: ```go package main import "fmt" func checkNil(i interface{}) { if i == nil { fmt.Println("空接口为nil") } else { fmt.Println("空接口不为nil") } } func main() { var a interface{} = nil checkNil(a) } ``` 这段代码会输出什么?如果想要正确判断空接口是否为nil,应该怎么做?
38.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

这段代码会输出:空接口不为nil。

在Go语言中,空接口 interface{} 其实是一个包含了类型信息和值的结构体。当声明 var a interface{} = nil 时,虽然值是 nil,但类型信息也为空,此时空接口变量并非真正意义上的 nil

如果想要正确判断空接口是否为 nil,可以利用类型断言,代码如下:

package main

import (
    "fmt"
)

func checkNil(i interface{}) {
    if i == nil {
        fmt.Println("空接口为nil")
    } else {
        _, ok := i.(type)
        if!ok {
            fmt.Println("空接口为nil")
        } else {
            fmt.Println("空接口不为nil")
        }
    }
}

func main() {
    var a interface{} = nil
    checkNil(a)
}

这样修改后,代码就能够正确判断空接口是否为 nil 了。