问题:
尽管声明了满足错误接口的结构体的 nil 实例,为什么与 nil 的比较会返回“Error is not nil”?
答案:
Go 中的接口比较同时考虑被比较实体的类型和值。将错误实例与 nil 进行比较时,会发生以下情况:
因此,尽管两个实例都使用 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中文网其他相关文章!