为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
DIEA 2022-09-12 20:18:51
我可以通过两种方式声明函数类型:type opener = func() errortype opener func() error 这些声明之间有什么区别?为什么你会使用一个而不是另一个?
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

根据语言规范,两者都是类型声明

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

  • opener并且是不同的类型。它们不可互换。func() error

  • 然而,正如迪斯科的赞美诗所指出的那样,因为它们具有相同的底层类型(),所以类型的表达式可以分配给类型的变量,反之亦然。func() erroropenerfunc() error

  • 可以在 上声明方法。opener

相反, 是别名声明: 被声明为类型的别名。type opener = func() erroropenerfunc() error

  • 这两种类型是“同义词”,可以完全互换。

  • 不能在此处声明方法,因为 不是已定义的类型。在更一般的情况下,仅当别名类型是与别名在同一包中定义的类型时,才能在类型别名上声明方法。openerfunc() error


在语言中添加类型别名(在Go 1.9中)的主要动机是逐步的代码修复,即将类型从一个包移动到另一个包。类型别名还有其他一些利基用例,但您很可能希望使用类型定义而不是别名声明


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信