別々のパッケージから同じメソッド シグネチャを持つインターフェイスを実装する
Go では、同じメソッド シグネチャを持つ 2 つの異なるインターフェイスを実装することは現実的ではありません。異なるパッケージ。通常、各インターフェイス タイプは特定の実装を期待し、タイプ セーフティを確保します。
ただし、オブジェクトが同じ名前のメソッドを持つ複数のインターフェイスを満たす必要がある場合、すべてのインターフェイスに一貫したロジックを実装することが困難になる可能性があります。
ケース例:
同一のメソッド シグネチャを持つインターフェイス Doer を含む 2 つのパッケージ A と B を考えます:
package A type Doer interface { Do() string }
package B type Doer interface { Do() string }
問題:
パッケージ main では、単一のオブジェクト C が A.Doer と B.Doer の両方を実装するように設計されています:
package main func (c C) Do() string { return "C now implements both A and B" }
ただし、この実装は次の場合にバグを引き起こします。 C で実装された Do メソッドは A.Doer のみを対象としているため、B.FuncB(c) を呼び出します。
解決策:
Go の埋め込み機能を使用し、個別のラッパー タイプを使用します。作成できます:
適切なラッパー型を引数として A.FuncA および B.FuncB に渡すことで、各インターフェイスに必要なロジックを維持できます。
追加の注意事項:
以上がGo で別のパッケージから同じメソッド シグネチャを持つインターフェイスを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。