Bagaimana untuk Menyelesaikan Ralat \'Kendalian Tidak Sah: Antara Muka Jenis {} Tidak Menyokong Pengindeksan\' dalam Go?

Linda Hamilton
Lepaskan: 2024-10-27 04:44:30
asal
531 orang telah melayarinya

How to Resolve the

Mengindeks Jenis Antara Muka dalam Go: Menyelesaikan Ralat "Operasi Tidak Sah"

Dalam Go, menghadapi ralat "operasi tidak sah: antara muka taip { } tidak menyokong pengindeksan" apabila cuba mengindeks jenis antara muka (antara muka{}) boleh mengecewakan. Ralat ini berlaku apabila anda cuba mengakses medan atau kaedah antara muka tanpa terlebih dahulu menegaskannya kepada jenis data tertentu.

Masalah:

Pertimbangkan coretan kod berikut :

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

Apabila cuba mengakses medan "jenis" respons JSON bersarang yang disimpan dalam d, anda mungkin menghadapi ralat "operasi tidak sah". Ini kerana d ialah antara muka jenis{}, yang mengabstrakkan sebarang jenis dan tidak menyokong pengindeksan.

Penyelesaian:

Untuk menyelesaikan ralat ini, anda perlu untuk melaksanakan penegasan jenis untuk menukar antara muka kepada jenis yang diketahui yang menyokong pengindeksan. Dalam kes ini, memandangkan anda menjangkakan d sebagai peta, anda boleh menggunakan kod berikut:

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

Pertama sekali, anda menegaskan d sebagai peta[rentetan]antara muka{}. Ini membolehkan anda mengindeksnya dengan kekunci rentetan. Kemudian, anda mengakses medan "data" dan ulangi proses penegasan untuk mendapatkan nilainya.

Pendekatan Alternatif:

Sebagai alternatif, anda boleh mengisytiharkan d sebagai peta[ string]antara muka{} secara langsung, menghapuskan keperluan untuk penegasan jenis pertama:

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

Kod ini mengekalkan kefungsian yang sama seperti pendekatan sebelumnya.

Nota Tambahan:

Jika anda kerap menghadapi isu pengindeksan ini, pertimbangkan untuk menggunakan perpustakaan seperti github.com/icza/dyno, yang memudahkan kerja dengan objek dinamik dalam Go.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan 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
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!