Menentukan Nama Medan Struktur Menggunakan Refleksi
Dalam Go, adalah mungkin untuk mengakses dan memanipulasi medan struct secara dinamik menggunakan pantulan. Walau bagaimanapun, cabaran biasa ialah menentukan nama medan struct tertentu.
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()) }
Dalam kod ini, penunjuk kepada struct A dicipta dan nilai diakses menggunakan refleksi. Walau bagaimanapun, fmt.Println(val.Field(0).Type().Name()) mencetak "rentetan" dan bukannya "Foo".
Penyelesaian
Untuk mendapatkan semula nama medan, anda perlu menggunakan Field(0).Name dan bukannya Type().Name(). Kod berikut menunjukkan cara untuk melakukan ini:
fmt.Println(val.Field(0).Name())
Kaedah Nama pada reflect.StructField menyediakan nama sebenar medan, iaitu "Foo".
Pertimbangan Lain
Adalah penting untuk ambil perhatian bahawa Medan(0) merujuk kepada medan pertama dalam struct. Jika anda perlu mendapatkan nama medan tertentu, anda boleh menggunakan indeksnya.
Selain itu, tiada cara untuk mendapatkan semula nama medan untuk refleksi.Nilai yang mewakili nilai medan tertentu. Maklumat ini tidak disimpan dalam nilai medan itu sendiri tetapi dalam struktur yang mengandungi.
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!