微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

声明函数类型的方法有什么区别?

如何解决声明函数类型的方法有什么区别?

我可以通过两种方式声明函数类型:

type opener = func() error

type opener func() error 

这些声明有什么区别?为什么要使用一个而不是另一个

解决方法

根据语言规范,两者都是 type declarations

type opener func() error 是一个 type definition。它引入了一个名为 opener 的新类型,其基础类型为 func() error

  • openerfunc() error 是不同的类型。它们不可互换。
  • 然而,作为 Hymns For Disco points out,因为它们具有相同的底层类型 (func() error),类​​型为 opener can be assigned 的表达式到类型为 {{1} 的变量},反之亦然。
  • 您可以在 func() error 上声明方法。

相反,openeralias declarationtype opener = func() error 被声明为 opener 类型的别名。

  • 这两种类型是“同义词”并且完全可以互换。
  • 您不能在此处声明 func() error 上的方法,因为 opener 不是已定义的类型。在更一般的情况下,只有当别名类型是在与别名相同的包中定义的类型时,您才能在类型别名上声明方法。

为语言添加类型别名的 primary motivation(在 Go 1.9 中)是渐进的代码修复,即将类型从一个包移动到另一个包。类型别名还有其他一些小众用例,但您很可能希望使用类型定义而不是别名声明

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。