Cara Mengendalikan Ralat \'Kendalian Tidak Sah: Antara Muka Jenis {} Tidak Menyokong Pengindeksan\' dalam Go?

DDD
Lepaskan: 2024-10-26 09:48:29
asal
777 orang telah melayarinya

How to Handle

Antara Muka Pengindeksan: Antara Muka Mengalamatkan {} Ralat Pengindeksan

Apabila bekerja dengan respons JSON bersarang, ia adalah perkara biasa untuk menghadapi ralat "tidak sah operasi: antara muka jenis {} tidak menyokong pengindeksan." Ini timbul apabila cuba mengakses nilai bersarang dalam pembolehubah ditaip antara muka, tetapi penegasan jenis yang betul tidak digunakan.

Pertimbangkan contoh berikut, dengan mengandaikan respons JSON seperti yang diberikan:

<code class="go">var d interface{}
json.NewDecoder(response.Body).Decode(&d)
test := d["data"].(map[string]interface{})["type"]</code>
Salin selepas log masuk

Barisan yang cuba mengakses nilai "jenis" membuang ralat pengindeksan kerana d ialah antara muka jenis{}, yang tidak menyokong pengindeksan seperti tatasusunan. Untuk menyelesaikan masalah ini, kita perlu menaip assert d kepada jenis yang sesuai, dalam kes ini, peta[rentetan]antara muka{}:

<code class="go">test := d.(map[string]interface{})["data"].(map[string]interface{})["type"]</code>
Salin selepas log masuk

Penegasan jenis bersarang ini membolehkan kami mengakses nilai "jenis" berjaya.

Sebagai alternatif, anda boleh menentukan jenis d sebagai peta[rentetan]antaramuka{} dari mula:

<code class="go">var d map[string]interface{}
json.NewDecoder(response.Body).Decode(&d)
test := d["data"].(map[string]interface{})["type"]</code>
Salin selepas log masuk

Dengan mengisytiharkan d sebagai peta[rentetan]antaramuka{} , penegasan jenis pertama adalah berlebihan.

Selain itu, jika melakukan operasi serupa berulang kali, pertimbangkan untuk menggunakan perpustakaan github.com/icza/dyno untuk memudahkan kerja dengan objek dinamik.

Atas ialah kandungan terperinci Cara Mengendalikan Ralat \'Kendalian Tidak Sah: Antara Muka Jenis {} Tidak Menyokong Pengindeksan\' 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
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!