Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mendapatkan Penunjuk kepada Nilai Menggunakan Refleksi dalam Go?

Bagaimana untuk Mendapatkan Penunjuk kepada Nilai Menggunakan Refleksi dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 15:23:02535semak imbas

How to Get a Pointer to a Value Using Reflection in Go?

Dapatkan Penunjuk kepada Nilai Menggunakan Refleksi

Memeriksa medan antara muka memerlukan penggunaan refleksi dalam Go. Walau bagaimanapun, cabaran timbul apabila cuba mendapatkan semula alamat medan bukan penunjuk. Artikel ini menangani cabaran tersebut dan menyediakan penyelesaian.

Dalam sampel kod yang disediakan, fungsi bernama InspectStruct merentasi struktur tertentu dan mengeluarkan butiran tentang setiap medan. Walaupun kebanyakan medan diambil kira, medan bukan penunjuk yang dibenamkan pada tahap yang lebih tinggi dalam struktur menghasilkan hasil "tidak boleh ditangani".

Penyelesaian

Isunya terletak pada penggunaan kaedah reflect.Value.Interface(). Untuk mendapatkan alamat medan bukan penuding, adalah disyorkan untuk menghantar reflect.Value dan bukannya antara muka{} kepada fungsi InspectStruct. Kod yang diperbetulkan di bawah menggabungkan perubahan ini:

<code class="go">func InspectStructV(val reflect.Value) {
    // ... (remaining code is identical)
}

func InspectStruct(v interface{}) {
    InspectStructV(reflect.ValueOf(v))
}</code>

Dengan pengubahsuaian ini, fungsi InspectStruct beroperasi seperti yang dimaksudkan, menghasilkan alamat semua medan dalam struktur, tanpa mengira kedalaman atau status penunjuknya. Ini boleh dilihat dalam keputusan ujian yang dikemas kini:

Field Name: Id,  Field Value: 1,     Address: 0x408125440 , Field type: int   , Field kind: int
Field Name: F,   Field Value: {2 {3}},   Address: 0x408125444 , Field type: main.V    , Field kind: struct
Field Name: Id,  Field Value: 2,     Address: 0x408125450 , Field type: int   , Field kind: int
Field Name: F,   Field Value: {3},   Address: 0x408125458 , Field type: main.Z    , Field kind: struct
Field Name: Id,  Field Value: 3,     Address: 0x408125460 , Field type: int   , Field kind: int

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Penunjuk kepada Nilai Menggunakan Refleksi dalam Go?. 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