Mengambil Nama Medan Struktur dengan Refleksi
Apabila menggunakan pakej pantulan dalam Go, anda boleh memanipulasi struktur dan medan secara dinamik. Walau bagaimanapun, isu timbul apabila cuba mencetak nama medan tertentu menggunakan pantulan.
Pertimbangkan coretan kod 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" }
Dalam contoh ini, matlamatnya adalah untuk mencetak "Foo ", tetapi ia mencetak "rentetan" sebaliknya. Ini kerana kaedah Field(0) mengembalikan nilai reflect.StructField, yang mengandungi maklumat tentang jenis medan, bukan namanya.
Untuk mendapatkan semula nama medan, anda perlu menggunakan Type() dan kaedah Field() pada reflect.Type value:
fmt.Println(val.Field(0).Type().Field(0).Name) // Prints "Foo"
Kaedah Field(0) pada reflect.Type value mengembalikan a reflect.StructField yang mewakili medan pertama struct. Medan Nama bagi mencerminkan ini.StructField mengandungi nama medan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nama Medan Struct Menggunakan Go Reflection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!