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函数的调用都分配了一个独特的和其他错误不相同的实例

  • 相关阅读:
    eclipse的快捷键【转载】
    eclipse调试断点【转载】
    eclipse打断点的调试
    Oracle存储过程的调试
    QT5线程关闭
    QT5 Thread线程
    QT5 文件读写操作
    QT5 Even 事件
    Qt 5 常用类及基本函数
    静态库lib、动态库dll基础
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14283323.html
Copyright © 2011-2022 走看看