我不确定这些应该是两个单独的问题还是一个,但在我看来,这是一个由两个部分组成的问题 - 应该如何使用 go 接口?我有这两个斗争:
接口的方法是全局范围的:如果我有接口 A 和接口 B,它们都实现了相同的方法 Foo,但具有不同的参数或返回类型,我无法从同一类型同时实现两者。例如,我在一个返回类型为 []byte 的接口和另一个 ([]byte, error) 接口中有 GetBytes() 方法我应该如何克服这个问题?
我遇到的另一个问题是,当我尝试定义接口时说接口 A 具有返回在同一层中定义的接口 B 的方法。现在,如果我想创建一个实现 A 的对象,如果我返回实现 B 的结构,则 go 不够聪明,无法推断该方法实现了 A 中的方法,它迫使我创建对 B 的依赖。这似乎完全击败了首先说明接口工作的方式。我怎样才能避免这个问题?
例如,如果我有:
type B interface {
Bar()
}
type A interface {
Foo() B
}
对于以下结构:
type b_impl struct{}
func (b b_impl) Bar() {}
type a_impl struct{}
一个 foo 方法
func (a a_impl) Foo() b_impl {}
不满足接口A,我需要做到:
func (a a_impl) Foo() B {}
这对声明 B 的包产生依赖关系。
阿波罗的战车
互换的青春
相关分类