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

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


type opener = func() error


type opener func() error 

这些声明之间有什么区别?为什么你会使用一个而不是另一个?


DIEA
浏览 103回答 1
1回答

慕的地10843

根据语言规范,两者都是类型声明。type opener func() error 是一个类型定义。它引入了一个名为 的新类型,其基础类型为 。openerfunc() erroropener并且是不同的类型。它们不可互换。func() error然而,正如迪斯科的赞美诗所指出的那样,因为它们具有相同的底层类型(),所以类型的表达式可以分配给类型的变量,反之亦然。func() erroropenerfunc() error可以在 上声明方法。opener相反, 是别名声明: 被声明为类型的别名。type opener = func() erroropenerfunc() error这两种类型是“同义词”,可以完全互换。不能在此处声明方法,因为 不是已定义的类型。在更一般的情况下,仅当别名类型是与别名在同一包中定义的类型时,才能在类型别名上声明方法。openerfunc() error在语言中添加类型别名(在Go 1.9中)的主要动机是逐步的代码修复,即将类型从一个包移动到另一个包。类型别名还有其他一些利基用例,但您很可能希望使用类型定义而不是别名声明。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go