Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mendapatkan Nama Medan Struct Menggunakan Go Reflection?

Bagaimanakah Saya Boleh Mendapatkan Nama Medan Struct Menggunakan Go Reflection?

Barbara Streisand
Barbara Streisandasal
2024-12-10 14:44:10348semak imbas

How Can I Retrieve a Struct Field Name Using Go Reflection?

Mendapatkan Nama Medan Struktur Menggunakan Refleksi

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!

Kenyataan:
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