zoukankan      html  css  js  c++  java
  • golang interface与nil比较的问题

    偶然看到一段有意思的代码:

    package main
    import (
    "fmt"
    )
    type Person struct {
    name string
    age int
    tel string
    }
    func main() {
    var man *Person = nil
    var ai interface{} = man
    var ei interface{} = nil
    fmt.Printf("ai == nil: %v\n", ai == nil)
    fmt.Printf("ai == ei: %v\n", ai == ei)
    fmt.Printf("ei == man: %v\n", ei == man)
    fmt.Printf("ei == nil: %v\n", ei == nil)
    }
    输出:
    ai == nil: false
    ai == ei: false
    ei == man: false
    ei == nil: true

    我以前是用c++,对输出觉着很奇怪。通过打印内存man,ai,ei三个变量内存情况,发现interface在golang内部其实是一个结构体,

    有_type,data两个指针组成,_type存数据类型,data存值,如下图:

    这样输出就很好理解了

    PS:1、看内存需要添加编译选项,保证不被编译器优化变量值,go build -gcflags "-N -l".
    LiteIDE这样设置:编译->编译配置,设置编译参数。在BUILDARGS添加-gcflags "-N -l"

           2、当使用interface自定义接口时与上面还有点不一样,感兴趣的可以自己打印看看,

    或者参考这位兄弟:http://compasses.github.io/2015/10/23/golang-interface-analysis-by-gdb/

  • 相关阅读:
    软件工程最后一次作业
    软件工程第二次结对作业
    软件工程第三次作业
    软件工程第二次个人作业
    软件工程第二次作业
    软件工程第一次作业
    2020软件工程最后一次作业
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
  • 原文地址:https://www.cnblogs.com/chukuang2004/p/5122645.html
Copyright © 2011-2022 走看看