Melalui Nilai Nil sebagai Antara Muka melalui Refleksi
Merenung antara muka membentangkan cabaran untuk menghantar nilai sifar dengan berkesan. Pertimbangkan fungsi berikut:
func f(e error) { if e == nil { fmt.Println("YEY! NIL") // Aim for this } else { fmt.Println("NOT NIL :(") } }
Jika anda cuba menghantar nilai sifar kepada fungsi melalui pantulan menggunakan kod di bawah, ia akan mengakibatkan panik:
nilArg := reflect.Zero(reflect.TypeOf((error)(nil)))
Jangan' t putus asa! Untuk memintas isu, gunakan ungkapan reflect.TypeOf((*error)(nil)).Elem() untuk mendapatkan reflect.Type untuk ralat antara muka. Silap mata ini melibatkan menghantar nilai bukan antara muka untuk mencerminkan.TypeOf() dan menggunakan reflect.Elem() untuk memperoleh jenis yang diingini.
Untuk pembinaan nilArg, gunakan yang berikut:
nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
Nikmati contoh taman permainan yang berfungsi untuk mengukuhkan pemahaman anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melepasi Nilai Antara Muka Nil Dengan Selamat Menggunakan Go Reflection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!