Menukar antara muka{} kepada Peta dengan Lelaran
Dalam kod anda, anda menghadapi ralat semasa cuba menukar antara muka{} kepada peta . Untuk menyelesaikan isu ini dan mendayakan lelaran ke atas elemen peta, ikut langkah berikut:
Gunakan Penegasan:
Ganti pendekatan berasaskan pantulan dengan penegasan jenis langsung, seperti yang ditunjukkan dalam kod di bawah:
func process(in interface{}, isSlice bool, isMap bool) { if isMap { v := in.(map[string]*Book) fmt.Printf("Type: %v\n", v) for _, s := range v { fmt.Printf("Value: %v\n", s) } } }
Pernyataan ini memberikan nilai antara muka{} kepada pembolehubah jenis peta[rentetan]*Tempah jika syarat dipenuhi. Pendekatan ini lebih cekap dan tidak memerlukan refleksi.
Sebagai alternatif, anda boleh menggunakan pernyataan suis untuk mengendalikan pelbagai jenis input tanpa menggunakan pantulan.
Gunakan Kekunci Peta Tersuai dengan Refleksi ( Pilihan):
Jika anda masih perlu menggunakan refleksi, anda boleh mendapatkan semula kunci peta menggunakan Value.MapKeys dan bukannya berulang terus ke atas nilai. Lihat jawapan Stack Overflow yang disebut dalam penyelesaian yang disediakan untuk butiran tentang pendekatan ini.
Atas ialah kandungan terperinci Bagaimana untuk Mengulang dengan Selamat Melalui peta[rentetan]*Tempah Selepas Menukar daripada antara muka{}?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!