正如常见问题解答所提到的
其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱。
在Go的类型系统中,仅按名称进行匹配并要求类型一致是简化的主要决定 。
在您的情况下,您将满足两个接口。
您可以通过执行以下操作来测试对象(接口类型)是否满足另一种接口类型
A.Doer:
if _, ok := obj.(A.Doer); ok {}OP添加:
但是,用这种
Do方法实现的逻辑与中的A完全不同B。
然后,您需要围绕对象实现包装器:
- a
DoerA
,将您的对象C
作为字段,并A.Do()
以满足应如何A.Do()
工作的方式实施 - a
DoerB
,它具有与C
字段相同的对象,并且B.Do()
以满足B.Do()
应该如何工作的方式实现
这样,您将知道将哪个Doer传递给期望an
A.Doer或a 的函数
B.Doer。
您将不必
Do()在原始对象上实现一个方法
C,该方法将无法应对
A.Do()and 的不同逻辑
B.Do()。



