您当前的位置: 首页 > 

少林码僧

暂无认证

  • 2浏览

    0关注

    317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

go interface{}==nil 几种坑及原理

少林码僧 发布时间:2019-10-16 15:37:39 ,浏览量:2

本文是Go比较有名的一个坑,在以前面试的时候也被问过,为什么想起来写这个?

因为我们线上就真实出现过这个坑,写给不了解的人在使用 if err != nil 的时候提高警惕。

Go语言的interface{}在使用过程中有一个特别坑的特性,当你比较一个interface{}类型的值是否是nil的时候,这是需要特别注意避免的问题。

先来看看一个demo:

package main

import "fmt"

type ErrorImpl struct{}

func (e *ErrorImpl) Error() string {
   return ""
}

var ei *ErrorImpl
var e error

func ErrorImplFun() error {
   return ei
}

func main() {
   f := ErrorImplFun()
   fmt.Println(f == nil)
}

//输出:

false

为什么不是true?

想要理解这个问题,首先需要理解interface{}变量的本质。在Go语言中,一个interface{}类型的变量包含了2个指针,一个指针指向值的在编译时确定的类型,另外一个指针指向实际的值。

// InterfaceStructure 定义了一个interface{}的内部结构

type InterfaceStructure struct {
   
  pt 
关注
打赏
1661398670
查看更多评论
立即登录/注册

微信扫码登录

0.0517s