如何解决声明函数类型的方法有什么区别?
我可以通过两种方式声明函数类型:
type opener = func() error
type opener func() error
解决方法
根据语言规范,两者都是 type declarations。
type opener func() error
是一个 type definition。它引入了一个名为 opener
的新类型,其基础类型为 func() error
。
-
opener
和func() error
是不同的类型。它们不可互换。 - 然而,作为 Hymns For Disco points out,因为它们具有相同的底层类型 (
func() error
),类型为opener
can be assigned 的表达式到类型为 {{1} 的变量},反之亦然。 - 您可以在
func() error
上声明方法。
相反,opener
是 alias declaration:type opener = func() error
被声明为 opener
类型的别名。
- 这两种类型是“同义词”并且完全可以互换。
- 您不能在此处声明
func() error
上的方法,因为opener
不是已定义的类型。在更一般的情况下,只有当别名类型是在与别名相同的包中定义的类型时,您才能在类型别名上声明方法。
为语言添加类型别名的 primary motivation(在 Go 1.9 中)是渐进的代码修复,即将类型从一个包移动到另一个包。类型别名还有其他一些小众用例,但您很可能希望使用类型定义而不是别名声明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。