構造体メソッドのインターフェイス実装の制限
Go では、構造体は同じ名前のメソッドがある場合にのみインターフェイスを実装できます。タイプ、およびインターフェイス メソッドとしての署名。次のコードを考えてみましょう:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
ここで、エラー メッセージは次のとおりです: 「テストする引数の型 B として d (型 D) を使用できません: D は実装されていません」 B (Connect メソッドのタイプが間違っています)"。これは、D の Connect メソッドの戻り値の型が *C であり、B インターフェイスで指定された (A, error) 戻り値の型と一致しないために発生します。
したがって、構造体のメソッドのパラメータまたは戻り値が異なる場合、対応するインターフェイス メソッドから型を取得した場合、構造体はインターフェイスを実装しません。
問題
この問題を解決するには、構造体 D の Connect メソッドをインターフェイス B の Connect メソッドと一致させる必要があります。これには、期待される (A、エラー) 型を返すようにすることが含まれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
この変更により、struct D の Connect メソッドが B インターフェイスの定義に準拠するようになるため、コードはエラーなしでコンパイルおよび実行されます。
以上が型の不一致を避けるために、Go Struct メソッドはインターフェイス定義とどのように一致する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。