Go での型チェックにリフレクションを使用する
Go でインターフェイスを扱うとき、インターフェイス値の基礎となる特定の型を識別する必要がある場合があります。 。たとえば、文字列値を持つ構造体と他の型を区別したい場合があります。
Reflect.TypeOf は、指定された型の記述子である Type を返します。ただし、Type を型にアサートするのは難しい場合があります。
インターフェイスの型値の識別
提供されたコード スニペットは、内部の switch ステートメントを使用して文字列値を持つ構造体を識別します。 IdentifyItemType 関数。これは、インターフェイスがターゲットの型に明示的にキャストされる単純なシナリオに対する簡単なアプローチです。ただし、リフレクションを使用する場合、reflect.TypeOf によって返される Type を型に直接アサートすることはできません。
代替アプローチ
Type を使用して型アサーションを実現する代わりに、直接的には、この状況を効果的に処理する他の方法があります:
switch x.(type) { case int: dosomething() }
s := reflect.ValueOf(x) for i := 0; i < s.NumFields(); i++ { switch s.Field(i).Interface().(type) { case int: dosomething() } }
このアプローチにより、インターフェース内の各フィールドを反復処理し、基礎となるタイプを調べることができます。それぞれの価値観。
以上がリフレクションは Go インターフェイスの基礎となる型を識別するのにどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。