ポインター値で `reflect.Value.FieldByName() を呼び出す
Go で、構造体ポインターでリフレクションを使用するときに、reflect を呼び出そうとする構造体のポインター値に対する .Value.FieldByName() の結果は次のようになります。エラー:
問題
このエラーは、ポインターとして表されている構造体の値のフィールドにアクセスしようとすると発生します。次の例を考えてみましょう。
このコードを実行すると、ファミリー フィールドがポインターであるためエラーが発生します。
解決策
これを解決するにはこの問題がある場合は、reflect.Indirect() を使用してポインタ値を逆参照し、実際の構造体の値を取得してからアクセスする必要があります。 field:
この変更により、コードは、ファミリーが値であるかポインターであるかに関係なく、ファミリー構造体の最後のフィールドに正しくアクセスできるようになります。
説明
reflect.Indirect() はポインタが指す値を返します。したがって、この場合、Family 構造体の値が返され、FieldByName() を介してアクセスできるようになります。
以上がGo で `reflect.Value.FieldByName()` を使用して構造体ポインターのフィールドにアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。