Bagaimana untuk Mendapatkan Penunjuk kepada Nilai Menggunakan Refleksi dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-01 15:23:02
asal
547 orang telah melayarinya

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!