美文网首页
判断interface 为nil

判断interface 为nil

作者: robertzhai | 来源:发表于2023-02-20 08:20 被阅读0次

interface

由(type,data) 组成,用下面的IsNil方法 判断,不能直接 == nil

package main

import (
    "fmt"
    "reflect"
)

func IsNil(i interface{}) bool {
    if i == nil {
        return true
    }
    vi := reflect.ValueOf(i)
    if vi.Kind() == reflect.Ptr {
        return vi.IsNil()
    }
    return false
}

func main() {
    var a *int = nil
    fmt.Println(IsNil(a))
    var pi *int = nil
    var i interface{}
    i = pi
    fmt.Println(i == nil, IsNil(i)) // 结果为 false true

    list := make([]interface{}, 10)
    for _, item := range list {
        fmt.Println(IsNil(item), reflect.TypeOf(item), reflect.ValueOf(item))
    }
}



output

true
false true
true <nil> <invalid reflect.Value>
true <nil> <invalid reflect.Value>
true <nil> <invalid reflect.Value>
true <nil> <invalid reflect.Value>
true <nil> <invalid reflect.Value>
true <nil> <invalid reflect.Value>
true <nil> <invalid reflect.Value>
true <nil> <invalid reflect.Value>
true <nil> <invalid reflect.Value>
true <nil> <invalid reflect.Value>

相关文章

网友评论

      本文标题:判断interface 为nil

      本文链接:https://www.haomeiwen.com/subject/lcrikdtx.html