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!