「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go リフレクションにおけるリフレクト.タイプとリフレクト.値の主な違いは何ですか?

Go リフレクションにおけるリフレクト.タイプとリフレクト.値の主な違いは何ですか?

2024 年 11 月 8 日に公開
ブラウズ:492

What is the key distinction between reflect.Type and reflect.Value in Go reflection?

Go のリフレクションの型と値

Go のリフレクションを使用すると、開発者は実行時に型と値を検査して操作できます。リフレクションを効果的に使用するには、これらの違いを理解することが重要です。

リフレクションにおける型と値

リフレクションでは、reflect.TypeOf(i) はリフレクト.Type オブジェクトを返します。一方、reflect.ValueOf(i) は、reflect.Value を返します。 object.

reflect.Type

  • 名前、パッケージ、基になる型など、型に関する情報を提供します。
  • 許可メソッド、フィールド、その他の型関連データに関するクエリ。
  • に渡される変数の実際の値は含まれません。 it.

reflect.Value

  • 渡される変数の実際の値を表します。
  • 読み取りと設定が可能
  • 値を返す Type() メソッドが含まれています。 reflect.Type.

Example

コード スニペット内:

func show(i interface{}) {
    switch t := i.(type) {
    case *Person:
        t := reflect.TypeOf(i)  // Get the type of *Person
        v := reflect.ValueOf(i)  // Get the value of i
        tag := t.Elem().Field(0).Tag
        name := v.Elem().Field(0).String() 
    }
}
  • t は、i が指す変数の型を表すreflect.Type オブジェクトです。
  • v は、指す変数の実際の値を表すreflect.Value オブジェクトです。 by i.
  • tag は、reflect.Type を通じて取得された Person 構造体の最初のフィールド (名前) のタグです。
  • name は、最初のフィールドの文字列表現ですReflect.Value.

リフレクションにおける型と値の違いを理解することで、開発者はイントロスペクション、動的メソッド呼び出し、データのシリアル化などのさまざまなシナリオでリフレクションの力を活用できます。 &&&]

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3