Pernyataan Masalah:
Pertimbangkan kod Golang 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 contoh ini, kod mencetak "rentetan", bukan "Foo". Bagaimanakah kita boleh mendapatkan semula nama medan "Foo" menggunakan pantulan dalam konteks ini?
Jawapan:
Untuk mendapatkan semula nama medan, gunakan Type().Field( 0).Namakan kaedah pada pantulan.Nilai. Kaedah ini mengembalikan nama jenis medan, yang dalam kes ini ialah "Foo". Kod yang diperbetulkan berikut menunjukkan perkara ini:
fmt.Println(val.Type().Field(0).Name()) // Prints "Foo"
Penjelasan:
Fungsi Tidak Langsung menafikan penunjuk a. Kaedah Type().Field(0) mendapatkan semula maklumat medan struct untuk medan pertama dan Name() mengekstrak nama medan. Ambil perhatian bahawa tiada cara untuk mendapatkan semula nama medan untuk refleksi.Nilai secara langsung, kerana maklumat ini dikaitkan dengan struct 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!