在 Go 中转换为类型别名
问题:
在示例代码片段中,第一个类型断言通过显式指定函数签名来成功。然而,第二个断言尝试转换为类型别名 someFuncy,会出现恐慌。为什么会这样,有没有办法转换为更长的函数签名?
说明:
与这里涉及类型转换的误解相反, Go 只提供类型断言和类型转换。重点是在提供的代码片段中使用的类型断言。
类型断言和转换之间的关键区别在于用于比较的标准。在转换中,例如 int 和 MyInt 的示例,会考虑基础类型。然而,对于类型断言,仅考虑确切的类型。
详细说明,在 a 的类型为 int 的示例中,断言 a.(MyInt) 失败,因为 int 与 MyInt 不同,即使两者共享相同的底层类型。
tl;dr:
类型断言检查确切的类型标识,这意味着像 someFuncy 这样的类型别名与 func(int) bool 不同。因此,第二次转换失败。
奖励:
代码片段中用于验证类型标识的代码仅供参考,展示了断言中涉及的直接比较过程。
以上是为什么在 Go 中转换为类型别名时类型断言失败?的详细内容。更多信息请关注PHP中文网其他相关文章!