[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函数的调用都分配了一个独特的和其他错误不相同的实例 (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |