Goでリフレクションを使用してポインターのフィールド値を取得する方法は?
リフレクションを使用したポインターのフィールド値の取得
この記事では、へのポインターを含む構造体のフィールド値を取得しようとしたときに直面する問題について説明します。
次の例を考えてみましょう:
type Family struct { first string last string } type Person struct { name string family *Family }
Family へのポインタを持つ person があると想像してください。リフレクションを使用して Family の最後のフィールドにアクセスしたいと考えています。次のコードはエラーで失敗します:
func Check(data interface{}) { var v = reflect.ValueOf(data) if v.Kind() == reflect.Struct { fmt.Println("was a struct") v = v.FieldByName("family").FieldByName("last") fmt.Println(v) } }
発生したエラーは次のとおりです:
reflect: call ofreflect.Value.FieldByName on ptr Value
理由このエラーは、ポインタが指す値ではなく、ポインタを表す Reflect.Value に対して .FieldByName("family") を呼び出そうとしていることです。
この問題を解決するには、まず間接的に.FieldByName() を呼び出す前のポインター値。修正されたコードは次のようになります。
func Check(data interface{}) { var v = reflect.ValueOf(data) if v.Kind() == reflect.Struct { fmt.Println("was a struct") familyPtr := v.FieldByName("family") v = reflect.Indirect(familyPtr).FieldByName("last") fmt.Println(v) } }
reflect.Indirect() を使用してポインター値を間接的に逆参照することで、基になる値にアクセスし、.FieldByName().
以上がGoでリフレクションを使用してポインターのフィールド値を取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?
