Rumah >pembangunan bahagian belakang >Golang >Bagaimana Saya Boleh Dapatkan Nama Medan Struct Menggunakan Go Reflection?
Mendapatkan Nama Medan Struktur Menggunakan Refleksi
Di Golang, refleksi membolehkan mengakses maklumat tentang struktur dan tingkah laku program semasa masa jalan. Satu kes penggunaan biasa ialah mendapatkan semula nama medan dalam struct.
Mari kita pertimbangkan contoh berikut:
type A struct { Foo string } func (a *A) PrintFoo() { fmt.Println("Foo value is " + a.Foo) } func main() { a := &A{Foo: "afoo"} val := reflect.Indirect(reflect.ValueOf(a)) fmt.Println(val.Field(0).Type().Name()) // Prints "string" }
Objektif di sini adalah untuk mencetak "Foo" sebagai nama medan, tetapi sebaliknya, ia mencetak "rentetan". Untuk memahami tingkah laku ini, mari kita mendalami kod tersebut.
Pertama, reflect.Indirect(reflect.ValueOf(a)) menukarkan penunjuk kepada struct a kepada reflect.Value yang mewakili nilai asas. val.Field(0) mengembalikan reflect.Value yang sepadan dengan medan pertama dalam struct, yang dalam kes ini ialah Foo.
Walau bagaimanapun, val.Field(0).Type().Name() mendapatkan semula jenis medan, iaitu rentetan. Nama medan itu sendiri boleh diperoleh menggunakan:
fmt.Println(val.Type().Field(0).Name) // Prints "Foo"
Ini kerana val.Type() memberikan akses kepada maklumat jenis struct, dan Field(0) seterusnya.Name mendapatkan semula nama daripada medan pertama.
Ringkasnya, untuk mendapatkan semula nama medan struct menggunakan pantulan, adalah perlu untuk menggunakan val.Type().Field(0).Nama daripada val.Field(0).Type().Name.
Atas ialah kandungan terperinci Bagaimana Saya Boleh Dapatkan Nama Medan Struct Menggunakan Go Reflection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!