我可以通过两种方式声明函数类型:
type opener = func() error
type opener func() error
这些声明有什么区别?你为什么要使用一个?
最佳答案
根据语言规范,两者都是 type declarations .type opener func() error
是 type definition .它引入了一个名为 opener
的新类型。其底层类型为 func() error
.
opener
和 func() error
是不同的类型。它们不可互换。 func() error
),类型为 opener
的表达式can be assigned到 func() error
类型的变量,反之亦然。 opener
上声明方法. 相比之下,
type opener = func() error
是 alias declaration :opener
被声明为 func() error
的别名类型。opener
上声明方法这里是因为 func() error
不是定义的类型。在更一般的情况下,只有当别名类型是在与别名相同的包中定义的类型时,您才能在类型别名上声明方法。 primary motivation为语言添加类型别名(在 Go 1.9 中)是逐步的代码修复,即将类型从一个包移动到另一个包。类型别名还有其他一些小众用例,但您最有可能想要使用类型定义而不是别名声明。
关于go - 声明函数类型的方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68325216/