判断interface 为nil

2023-02-20  本文已影响0人  robertzhai

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>
上一篇 下一篇

猜你喜欢

热点阅读