zoukankan      html  css  js  c++  java
  • [Go] golang中接口值(interface)与nil比较或指针类型之间比较的注意问题

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

    下面这种情况不是nil

    func f(out io.Writer) {
        // ...do something...
        if out != nil {
            out.Write([]byte("done!
    "))
        }
    }
    
    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函数的调用都分配了一个独特的和其他错误不相同的实例

  • 相关阅读:
    热烈祝贺自己的博客进入前1000名
    烈日之后逛成都
    懂得爱情
    腾飞天涯
    哈佛教授教你成为No.1的秘诀
    烈日炎炎
    有缘无份——因为伤感所以美丽
    时间管理
    亲爱的陌生人(转)
    走好激励第一步
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14283323.html
Copyright © 2011-2022 走看看