Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mendapatkan Nama Medan Struct Menggunakan Go Reflection?

Bagaimana untuk Mendapatkan Nama Medan Struct Menggunakan Go Reflection?

Patricia Arquette
Lepaskan: 2024-12-07 06:07:17
asal
535 orang telah melayarinya

How to Retrieve a Struct Field's Name Using Go Reflection?

Mendapatkan semula Nama Medan Struktur dengan Refleksi

Dalam keupayaan refleksi Go, seseorang boleh mengintrospeksi struktur sewenang-wenangnya menggunakan pakej pantulan. Walau bagaimanapun, persoalan biasa timbul: bagaimana untuk mendapatkan nama medan struct?

Pertimbangkan 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"
}
Salin selepas log masuk

Dalam contoh ini, matlamatnya adalah untuk mencetak "Foo" menggunakan refleksi. Walau bagaimanapun, kod pada masa ini mencetak "rentetan". Mengapa ini berlaku?

Jawapannya terletak pada kaedah pakej reflect:

  • reflect.Value.Field: Mendapatkan reflect.Value yang mewakili medan pada indeks tertentu dalam struct .
  • mencerminkan.Nilai.Jenis: Mendapatkan semula pantulan.Jenis reflect.Value.
  • reflect.Type.Field: Mendapatkan reflect.StructField yang menerangkan medan tertentu dalam jenis struct.

Untuk mendapatkan nama medan, kita mesti mendapatkan mencerminkan.Nilai untuk struct itu sendiri. Kita boleh melakukan ini dengan menyahrujuk penuding kepada struct dan mendapatkan pantulannya. Nilai menggunakan reflect.ValueOf.

Seterusnya, kita perlu mendapatkan semula reflect.Value untuk medan pertama struct. Kita boleh melakukan ini menggunakan val.Field(0).

Akhir sekali, kita boleh mendapatkan reflect.Type medan menggunakan val.Field(0).Type(). Untuk mendapatkan nama medan, kami kemudiannya boleh memanggil val.Field(0).Type().Name().

Oleh itu, kod yang diubah suai di bawah akan mencetak "Foo" dengan betul:

fmt.Println(val.Field(0).Type().Field(0).Name())
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nama Medan Struct Menggunakan Go Reflection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan