これらは2つの別個の質問か1つであるべきかどうかわかりませんが、2つの部分の1つの質問と思われます - どのようにインターフェイスを使用する予定ですか?インターフェイスに依存するgolangインターフェイス
インターフェイスのメソッドはグローバルスコープです。インターフェイスAとインターフェイスBが両方とも同じメソッドFooを実装していて、引数や戻り値の型が異なる場合は、両方で実装できません。同じタイプから同じ時間。たとえば、あるインタフェースでGetBytes()メソッドを返し、戻り値の型が[]バイトで、別の([]バイト、エラー)メソッドでこの問題を解決する方法はありますか?
別の問題は、同じレイヤーで定義されたインターフェイスBを返すメソッドを持つインターフェイスAを定義しようとするときです。今、Aを実装するオブジェクトを作成したい場合、Bを実装する構造体を返すと、このメソッドは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が宣言されているパッケージに依存します。
「どのようにこの問題を解決する必要がありますか?」 Goはメソッドのオーバーロードをサポートしていないため、できません。 https://golang.org/doc/faq#overloadingを参照してください。私はあなたの第二の質問が答えようとするほど十分に理解していません。おそらくコード例を提供すると助けになるでしょう。 – smarx
ありがとうございます@smarx - 私は2番目の部分の詳細についての質問を編集しました – gsf
私はあなたの2番目の問題についてもできることは何もないと思います。 – smarx