我想实现两个不同的接口(来自两个不同的包)。但它们之间存在冲突,如下所示:
type InterfaceA interface {
Init()
}
type InterfaceB interface {
Init(name string)
}
type Implementer struct {} // Wants to implement A and B
func (i Implementer) Init() {}
func (i Implementer) Init(name string) {} // Compiler complains
Run Code Online (Sandbox Code Playgroud)
它说“方法重新声明”。一个结构如何实现这两个接口?
小智 6
正如已经回答的那样,这是不可能的,因为 Golang 不(并且可能不会)支持方法重载。
其他语言的经验告诉我们,使用具有相同名称但不同签名的多种方法有时是有用的,但在实践中也可能会造成混乱和脆弱。仅按名称匹配并要求类型一致是 Go 类型系统中的一个重大简化决策。