Go のリフレクションを使用して動的なカスタム タイプを作成するには?カスタム タイプを作成する: type キーワードを使用して構造を定義します。リフレクション タイプを取得する:reflect.TypeOf() 関数を通じてタイプ リフレクション タイプを取得します。動的タイプを作成する: カスタム タイプへのポインターを作成するには、reflect.New 関数を使用します。値の設定: v.Elem() 関数とreflect.Set() 関数を使用して値を設定します。値の取得: Interface() メソッドを使用して、値のインターフェイス値を取得します。
Go のリフレクションを使用して動的カスタムタイプを作成する方法
リフレクションは、プログラムが独自のコードを検査して変更できるようにする Go の強力な機能です。リフレクションを使用すると、必要に応じて実行時に変更できる動的なカスタム タイプを作成できます。
カスタム タイプを作成する
カスタム タイプを作成するには、type
を使用できます。 キーワード: type
关键字:
type person struct { name string age int }
反射类型
要获取一个类型的反射类型,可以使用 reflect.TypeOf()
函数:
t := reflect.TypeOf(person{})
创建动态类型
要创建动态类型,我们可以使用 reflect.New
函数以指定反射类型作为参数:
v := reflect.New(t)
该 v
变量现在代表了一个指向自定义类型的指针。我们现在可以使用反射来设置和获取值:
设置值
可以使用 v.Elem()
获取指针指向的值,然后使用标准方法或 reflect.Set
函数设置值:
v.Elem().FieldByName("name").SetString("John") v.Elem().FieldByName("age").SetInt(30)
获取值
使用 reflect.Value
类型的 Interface
方法可以获取值的接口值:
name := v.Elem().FieldByName("name").Interface() age := v.Elem().FieldByName("age").Interface()
实战案例
假设我们有一个 JSON 字符串,其中包含一个人的姓名和年龄:
{ "name": "Jane", "age": 35 }
我们可以使用反射来动态创建 person
import ( "encoding/json" "fmt" "reflect" ) func main() { // 反射创建自定义类型 t := reflect.TypeOf(person{}) v := reflect.New(t) // 反射解组 JSON 字符串 var data map[string]interface{} err := json.Unmarshal([]byte(`{ "name": "Jane", "age": 35 }`), &data) if err != nil { panic(err) } // 反射设置字段值 for k, v := range data { v.Elem().FieldByName(k).Set(reflect.ValueOf(v)) } // 反射获取字段值 fmt.Println(v.Elem().FieldByName("name").Interface()) // 输出:"Jane" fmt.Println(v.Elem().FieldByName("age").Interface()) // 输出:35 } type person struct { name string age int }
reflect.New
関数を使用できます。パラメータとして: 🎜 rrreee🎜 v
変数はカスタム タイプへのポインタを表すようになりました。リフレクションを使用して値を設定および取得できるようになりました: 🎜🎜🎜値を設定します 🎜🎜🎜 v.Elem()
を使用してポインタが指す値を取得し、標準メソッドを使用できますまたは reflect.Set
関数で値を設定します: 🎜rrreee🎜🎜値を取得します 🎜🎜🎜reflect.Value
の Interface
メソッドを使用しますtype を使用して、値のインターフェイス値を取得します: 🎜rrreee🎜🎜 実際のケース 🎜🎜🎜人の名前と年齢を含む JSON 文字列があるとします: 🎜rrreee🎜 リフレクションを使用して、person を動的に作成できます。 code> を入力して値を設定します: 🎜rrreee
以上がGolang リフレクションを使用して動的なカスタム タイプを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。