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>
网友评论