我可以通过两种方式声明函数类型:type opener = func() errortype opener func() error 这些声明之间有什么区别?为什么你会使用一个而不是另一个?
1 回答
慕的地10843
TA贡献1785条经验 获得超8个赞
根据语言规范,两者都是类型声明。
type opener func() error
是一个类型定义。它引入了一个名为 的新类型,其基础类型为 。opener
func() error
opener
并且是不同的类型。它们不可互换。func() error
然而,正如迪斯科的赞美诗所指出的那样,因为它们具有相同的底层类型(),所以类型的表达式可以分配给类型的变量,反之亦然。
func() error
opener
func() error
可以在 上声明方法。
opener
相反, 是别名声明: 被声明为类型的别名。type opener = func() error
opener
func() error
这两种类型是“同义词”,可以完全互换。
不能在此处声明方法,因为 不是已定义的类型。在更一般的情况下,仅当别名类型是与别名在同一包中定义的类型时,才能在类型别名上声明方法。
opener
func() error
在语言中添加类型别名(在Go 1.9中)的主要动机是逐步的代码修复,即将类型从一个包移动到另一个包。类型别名还有其他一些利基用例,但您很可能希望使用类型定义而不是别名声明。
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报
0/150
提交
取消