reflect: FieldByName のポインター エラーへの対処
提供されたコードでは、「ファミリー」の「最後の」フィールドへのアクセスを試みます。 " リフレクションを使用した構造体。ただし、「family」フィールドはポインターであり、「FieldByName」を使用してその「最後の」フィールドに直接アクセスするとエラーが発生します:
reflect: call of reflect.Value.FieldByName on ptr Value
これに対処するには、まずアクセスするポインターを逆参照する必要があります。構造体の実際の値。これは、「reflect」パッケージの「Indirect」関数を使用して実現できます。
変更されたコードは次のとおりです。
familyPtr := v.FieldByName("family") v = reflect.Indirect(familyPtr).FieldByName("last")
このコードでは、最初に、 「FieldByName」を使用した「family」フィールド。次に、「Indirect」を使用してポインターを逆参照し、「Family」構造体の実際の値を取得します。最後に、逆参照された値の "FieldByName" を使用して "最後の" フィールドにアクセスできます。
このアプローチに従うことで、"Family" 構造体の "最後の" フィールドにアクセスできるようになります。ポインタ参照。
以上がGoでリフレクションを使用してポインタを介して構造体のフィールドにアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。