Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mendapatkan Penunjuk kepada Nilai Menggunakan Refleksi dalam 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!