Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk mencipta jenis tersuai dinamik menggunakan pantulan Golang?
Bagaimana untuk mencipta jenis tersuai dinamik menggunakan pantulan Go? Buat jenis tersuai: Gunakan kata kunci jenis untuk menentukan struktur. Dapatkan jenis pantulan: Dapatkan jenis pantulan melalui fungsi reflect.TypeOf(). Cipta jenis dinamik: Gunakan fungsi reflect.New untuk mencipta penunjuk kepada jenis tersuai. Tetapkan nilai: Gunakan fungsi v.Elem() dan reflect.Set() untuk menetapkan nilai. Dapatkan nilai: Gunakan kaedah Antaramuka() untuk mendapatkan nilai antara muka nilai tersebut.
Cara mencipta jenis tersuai dinamik menggunakan pantulan Go
Refleksi ialah ciri berkuasa dalam Go yang membolehkan program memeriksa dan mengubah suai kodnya sendiri. Dengan refleksi, kami boleh mencipta jenis tersuai dinamik yang boleh diubah suai pada masa jalan seperti yang diperlukan.
Buat jenis tersuai
Untuk mencipta jenis tersuai, kita boleh menggunakan type
Kata kunci: 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 }🎜Jenis reflektif🎜🎜🎜Untuk mendapatkan jenis reflektif, kita boleh menggunakan reflect.TypeOf() fungsi: 🎜rrreee🎜🎜Mencipta jenis dinamik 🎜🎜🎜Untuk mencipta jenis dinamik, kita boleh menggunakan fungsi
reflect.New
dengan jenis pantulan yang ditentukan sebagai parameter: 🎜 rrreee🎜Pembolehubah v
kini mewakili penuding kepada jenis tersuai. Kini kita boleh menggunakan refleksi untuk menetapkan dan mendapatkan nilai: 🎜🎜🎜Tetapkan nilai 🎜🎜🎜 Anda boleh menggunakan v.Elem()
untuk mendapatkan nilai yang ditunjuk oleh penunjuk, kemudian gunakan kaedah standard atau reflect.Set
Fungsi untuk menetapkan nilai: 🎜rrreee🎜🎜Dapatkan nilai 🎜🎜🎜Gunakan kaedah Antaramuka
reflect.Value
taip untuk mendapatkan nilai antara muka nilai: 🎜rrreee🎜🎜 Kes praktikal 🎜🎜🎜Andaikan kita mempunyai rentetan JSON yang mengandungi nama dan umur seseorang: 🎜rrreee🎜Kita boleh menggunakan refleksi untuk mencipta Atas ialah kandungan terperinci Bagaimana untuk mencipta jenis tersuai dinamik menggunakan pantulan Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!