Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Ralat \"Kendalian Tidak Sah: Antara Muka Jenis {} Tidak Menyokong Pengindeksan\" dalam Go?

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

Linda Hamilton
Linda Hamiltonasal
2024-10-27 04:44:30510semak imbas

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>

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>

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>

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!

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