1. 首页
  2. 操作系统
  3. 桌面系统
  4. Go语言interface 与 nil 的比较

Go语言interface 与 nil 的比较

上传者: 2020-09-29 13:51:09上传 PDF文件 66.72KB 热度 29次

然而Go语言的interface在使用过程中却有一个特别坑的特性,当你比较一个interface类型的值是否是nil的时候,这是需要特别注意避免的问题。以一个使用Redis作为对象数据库的实现为例,函数OpenRedis连接Redis数据库并最终返回一个redisEntityStorage对象的指针。这个就是Go语言少有的几个深坑之一,因为不管OpenRedis函数是否连接Redis成功,都会运行连接成功的逻辑。这段代码的输出如下:所以对于一个interface{}类型的nil变量来说,它的两个指针都是0。这是符合Go语言对nil的标准定义的。在Go语言中,nil是零值,而在Java之类的语言里,null实际上是空指针。以上述的OpenRedis为例,一种方法是先对OpenRedis返回的结果进行非-nil检查,然后再赋值给interface变量,如下所示。

下载地址
用户评论