Bagaimanakah Saya Boleh Melepasi Nilai Antara Muka Nil Dengan Selamat Menggunakan Go Reflection?

Mary-Kate Olsen
Lepaskan: 2024-11-23 09:44:24
asal
595 orang telah melayarinya

How Can I Safely Pass Nil Interface Values Using Go Reflection?

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 :(")
    }
}
Salin selepas log masuk

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)))
Salin selepas log masuk

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())
Salin selepas log masuk

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!

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