首页 > 后端开发 > Golang > 正文

为什么将 Nil 结构体实例与 Nil 进行比较会返回'错误不是 nil”?

Linda Hamilton
发布: 2024-10-30 08:56:02
原创
723 人浏览过

Why Does Comparing a Nil Struct Instance to Nil Return

与 Nil 值的接口比较

问题:

尽管声明了满足错误接口的结构体的 nil 实例,为什么与 nil 的比较会返回“Error is not nil”?

答案:

Go 中的接口比较同时考虑被比较实体的类型和值。将错误实例与 nil 进行比较时,会发生以下情况:

  • 错误接口的 nil 实例具有 nil 值和 nil 类型 (error(nil))。
  • nil Goof 结构体的实例具有 nil 值,但具有非 nil 类型 (*Goof)。

因此,尽管两个实例都使用 nil 值初始化,但它们的不同类型会导致不相等的比较。

为了解决这个问题并返回预期的“Error is nil”输出,nil 实例应该分配给一个 error 变量,因为它的零值为 error(nil)。或者,在返回错误的函数中返回 nil 也会产生预期的结果。

接口比较的详细说明:

Go 接口是使用类型和价值。类型表示接口的具体实现,而值表示实际存储的数据。仅当类型和值都未设置 (nil, nil) 时,接口值才被视为 nil。

比较两个接口值是否相等时,类型和值必须匹配。在提供的示例中,Goof 结构体的 nil 实例有一个 nil 值,但有一个非 nil 类型,使其不等于同时具有 nil 值和类型的 error 实例。

这个概念扩展到零实例之外。例如,具有相同基础数据(例如 3)但不同类型(int 和 Bob)的两个整数值在存储在接口中时将比较不相等,因为类型不同。

以上是为什么将 Nil 结构体实例与 Nil 进行比较会返回'错误不是 nil”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!