加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[Go] golang中接口值(interface)与nil比较或指针类型之间比较的

发布时间:2021-05-21 06:49:55 所属栏目:大数据 来源: https://www.jb51.cc
导读:注意问题,当对interface变量进行判断是否为nil时, 只有当动态类型和动态值都是nil,这个变量才是nil 下面这种情况不是nil func f( out io.Writer) { // ...do something... if out != nil { out .Write([] byte ( " done!n " )) }} var buf * bytes.Bufferf(

注意问题,当对interface变量进行判断是否为nil时,只有当动态类型和动态值都是nil,这个变量才是nil

下面这种情况不是nil

func f(out io.Writer) {
    // ...do something...
    if out != nil {
        out.Write([]byte("done!n"))
    }
}

var buf *bytes.Buffer
f(buf)

?

?

?上面的情况,动态类型部分不是nil?,因此 out就不是nil

?

动态类型为指针的interface之间进行比较也要注意?

当两个变量的动态类型一样,动态值存的是指针地址,这个地址如果不是一样的,那两个值也是不同的

?

w1 := errors.New("ERR")
w2 := errors.New("ERR")
fmt.Println(w1 == w2) // 输出false

?

?

由于 w1.value 和 w2.value 都是指针类型,它们又分别保存着不同的内存地址,所以他们的比较是得出 false

也正是这种实现,每个New函数的调用都分配了一个独特的和其他错误不相同的实例

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读