【发布时间】:2020-09-15 21:02:09
【问题描述】:
假设我必须遵循实现Foo 的接口Foo 和A 和B:
type Foo interface {
SayHi()
SayBye()
}
type A struct {}
func(a A) SayHi() {}
func(a A) SayBye() {}
type B struct {}
func(b B) SayHi() {}
func(b B) SayBye() {}
如果我想要来自A 的SayHi 方法,但是来自B 的SayBye 方法,那么最好的语法方法是什么?
我总是可以做到的:
type AB struct {
a A
b B
}
func(ab AB) SayHi() { ab.a.SayHi() }
func(ab AB) SayBye() { ab.a.SayBye() }
但这需要我为每个方法创建一个包装器。另一种方法是将A 和B 嵌入到AB 中,但这会产生冲突。
【问题讨论】:
-
您可以通过结构嵌入来做到这一点,如下所示:play.golang.org/p/74RphthhN36 但老实说,我无法想象有必要这样做的场景
-
您的解决方案@Kosanovic 没有实现可能需要的接口
Foo。但它更易于阅读。如果您将其作为答案发布,我会投票赞成。
标签: go methods struct interface embedding