エラー メッセージ:
cannot use &f (type *Bar) as type StringerGetter in argument to Printer: *Bar does not implement StringerGetter (wrong type for GetStringer method) have GetStringer() *Foo want GetStringer() fmt.Stringer
Go では、インターフェイス メソッドは次のものに依存します。正確な型一致。これは、インターフェイスを返す関数は、インターフェイスとその実装の両方でまったく同じ型を持つ必要があることを意味します。一致しない場合、Go はコンパイル時エラーを生成します。
この場合、インターフェイス StringerGetter は fmt.Stringer を返すメソッド GetStringer() を指定します。ただし、具象型 Bar の GetStringer() 実装は、fmt.Stringer ではない Foo 構造体へのポインタを返します。この不一致により、コンパイル時エラーが発生します。
解決策:
インターフェイスを正確に実装します:
具体的な型を新しい型でラップします:
Use Assertion:
重要な考慮事項:
以上がここでは、エラーの「理由」と「方法」を考慮したいくつかのタイトル オプションを示します。 「なぜ」を強調する * Go コードが St 型として「使用できません...」をスローするのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。