ホームページ > バックエンド開発 > Golang > structのinterface-typeフィールドが設定されているかどうかを確認します。

structのinterface-typeフィールドが設定されているかどうかを確認します。

PHPz
リリース: 2024-02-09 18:27:08
転載
692 人が閲覧しました

structのinterface-typeフィールドが設定されているかどうかを確認します。

php エディター Xiaoxin は、構造体のインターフェイス タイプ フィールドが設定されているかどうかを判断するためのヒントを共有します。 Go 言語では、構造体型は複数のインターフェイスを実装できるため、interface-type フィールドが設定されているかどうかを判断することで、構造体が特定のインターフェイスを実装しているかどうかを簡単に判断できます。この手法は非常に実用的で、コード内のオブジェクトのタイプを正確に判断し、それに応じて処理できます。続いては具体的な導入方法を見ていきましょう!

質問の内容

構造体が与えられた場合、そのフィールドはインターフェイス タイプに属します:

リーリー

これらのインターフェイスを実装する構造:

リーリー

そして、すべてのフィールドを明示的に設定せずに container インスタンスを作成するコード:

リーリー

リフレクションを使用して、明示的に設定されていないフィールドを検出するにはどうすればよいでしょうか?

実行時に fieldb の値をチェックすると、vscode は値を nil として報告します。同様に、c.fieldb.bar() を呼び出そうとすると、nil ポインター逆参照によりパニックが発生します。しかし、リフレクションでは isnil をテストできず、iszero も true を返しません:

type a interface { foo() }
type b interface { bar() }

type container struct {
   fielda a
   fieldb b
   ...
}
ログイン後にコピー

回避策

フィールドで reflect.typeof(*c) ではなく reflect.valueof(*c) を確認する必要があります。

リーリー

出力:

リーリー

以上がstructのinterface-typeフィールドが設定されているかどうかを確認します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート