极客油画

空指针和nil的区别

package main

import “fmt”

type Inter interface { Ping() Pang() }

type St struct{}

func (St) Ping() { println(“ping”) }

func (*St) Pang() { println(“pang”) }

func main() { var st *St = nil var it Inter = st

fmt.Printf("%p\n", st)
fmt.Printf("%p\n", it)

// 注意,空接口有两个字段,一个是实例类型,另一个是指向绑定实例的指针
// 只有两个都为nil时,空接口才为nil。
if it != nil {
    it.Pang()

    // 下面的语句会导致panic
    // 方法转换为函数调用,第一个参数是St类型,由于*St是nil,无法获取指针所指的
    // 对象值,所以导致panic
    //it.Ping()
}

}


专题:

本文发表于 2022-09-13,最后修改于 2022-09-13。

本站永久域名「 jiavvc.top 」,也可搜索「 极客油画 」找到我。


上一篇 « 类型系统 下一篇 » 泛型

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image