ホームページ  >  記事  >  バックエンド開発  >  Go で匿名構造体にアクセスすると「メソッドのないインターフェイス」が表示されるのはなぜですか?

Go で匿名構造体にアクセスすると「メソッドのないインターフェイス」が表示されるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 04:23:01834ブラウズ

Why do I get

Go の "メソッドのないインターフェイス" を理解する

コード内で、「typeinterface {} は no のインターフェイスです」というエラーが発生しました。メソッド」は、関数に渡された匿名構造体からフィールドにアクセスしようとするときに発生します。このエラーを理解するには、Go のインターフェイスの概念を理解することが不可欠です。

Go のインターフェイスは、具象型が実装する必要があるメソッドのセットを定義する型です。ただし、あなたの場合、使用しているインターフェイスは、インターフェイス {} で示される「空のインターフェイス」です。空のインターフェイスにはメソッドがなく、任意の型の値を保持できるため、ユニバーサル型になります。

匿名構造体フィールドにアクセスします

次のフィールドにアクセスするにはNewJob に渡される匿名構造体の場合、そのフィールドにアクセスする前に、それを互換性のある型に型アサートする必要があります。型アサーションを使用すると、空のインターフェイスを特定の具象型に変換できます。

修正されたコード

<code class="go">id := v.(struct{Id int}).Id</code>

この修正されたコードでは、 v インターフェイスを型アサートします。 ID フィールドを持つ構造体に変換します。これにより、Id フィールドにアクセスできるようになり、プログラムは期待どおりに実行されます。

型アサーションが失敗すると実行時エラーが発生する可能性があるため、型アサーションは慎重に使用する必要があることに注意してください。

以上がGo で匿名構造体にアクセスすると「メソッドのないインターフェイス」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。