当把一个空指针对象赋值给一个interface后 (推荐学习:go)

   var pi *int = nil    var i interface{}    i = pi    fmt.Println(i == nil) // 结果为 false

这个不难理解,因为i = pi,不是将nil赋值给i,而是让i指向了pi这个对象。

判断interface里的指针是否为空

那么,现在的问题是,如何判断interface里的指针是否为空呢?

知道类型的情况下,自然是可以使用类型断言后判空。如ai, ok := i.(*int),之后判断ai == nil。

不知道是何种类型的指针,就只好借助反射了vi := reflect.ValueOf(i),后使用vi.IsNil()来判断。但如果i里放到不是一个指针,调用IsNil会出异常,则可能要写一个这样的函数来判空

func IsNil(i interface{}) bool {    defer func() {        recover()    }()    vi := reflect.ValueOf(i)    return vi.IsNil()}

但有这样强加一个defer的recover确实不好看,于是借助类型判断变成这样

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

更多相关文章

  1. golang怎么判断指针是否为空
  2. golang怎么把字符串转成Int类型
  3. golang判断错误类型的方法
  4. 详解 Go 中的不可变类型
  5. 总结 Go 的数据类型
  6. 关于Go指针的介绍
  7. 详解Golang中函数作为值与类型
  8. golang中方法的receiver为指针和不为指针有什么区别
  9. 关于Golang 指针理解

随机推荐

  1. 线性布局LinearLayout和相对布局Relative
  2. Android将drawable图像转化为二进制字节
  3. ubuntu 安装 android studio
  4. 在已有的Android工程中接入ReactNative
  5. Android使用Eclipse打包
  6. Android中的Animation的使用
  7. android基础---->Parcelable的使用
  8. Android前向兼容的几个问题
  9. Android微信端的下拉刷新功能
  10. android 中文api (84) —— TrafficStats