首页  >  文章  >  后端开发  >  为什么将 Nil 结构体实例与 Nil 进行比较会返回“错误不是 nil”?

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

Linda Hamilton
Linda Hamilton原创
2024-10-30 08:56:02709浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn