ここでは、エラーの「理由」と「方法」を考慮したいくつかのタイトル オプションを示します。 「なぜ」を強調する * Go コードが St 型として「使用できません...」をスローするのはなぜですか

Barbara Streisand
リリース: 2024-10-27 05:25:03
オリジナル
934 人が閲覧しました

Here are a few title options,  playing with the

インターフェイス メソッドの戻り値の型の不一致について

エラー メッセージ:

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 構造体へのポインタを返します。この不一致により、コンパイル時エラーが発生します。

解決策:

  1. インターフェイスを正確に実装します:

    • Bar の GetStringer() メソッドを変更して、fmt.Stringer を直接返すようにします。
  2. 具体的な型を新しい型でラップします:

    • Bar を埋め込み、Bar の埋め込み GetStringer() メソッドを使用して StringerGetter を実装する、MyBar などの新しいタイプを作成します。これにより、Bar の機能を保持しながらインターフェイスに準拠できます。
  3. Use Assertion:

    • 具象タイプをアサートします。 GetStringer() メソッドから返す前に fmt.Stringer と入力するためのバー。この解決策はパフォーマンスとランタイムに影響を与える可能性があることに注意してください。

重要な考慮事項:

  • インターフェイスはメソッド シグネチャのみを指定します。メソッドの実装ではありません。
  • 具象型が、インターフェイスが必要とするものとは異なるシグネチャを持つメソッドを実装している場合、それはインターフェイスの実装とみなされません。
  • 型アサーションは、特定のシナリオで役立つ場合があります。ただし、実行時エラーやパフォーマンスのオーバーヘッドを避けるために注意して使用する必要があります。

以上がここでは、エラーの「理由」と「方法」を考慮したいくつかのタイトル オプションを示します。 「なぜ」を強調する * Go コードが St 型として「使用できません...」をスローするのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!