Rumah > pembangunan bahagian belakang > Golang > Mengapa Slice Nil Dilalui ke Antara Muka dalam Tidak Sama Nil?

Mengapa Slice Nil Dilalui ke Antara Muka dalam Tidak Sama Nil?

Barbara Streisand
Lepaskan: 2024-11-04 01:28:03
asal
313 orang telah melayarinya

Why Does a Nil Slice Passed to an Interface in Go Not Equal Nil?

Memahami Sifar Slice Paradox dalam Antara Muka Go

Apabila menghantar hirisan sifar sebagai antara muka, mengapakah hasilnya tidak sifar? Tingkah laku yang membingungkan ini boleh dijelaskan dengan memahami pelaksanaan asas antara muka Go.

Dalam Go, pembolehubah antara muka{} pada asasnya ialah struktur dwi-medan, terdiri daripada deskriptor jenis dan nilai data, seperti yang digambarkan oleh Iface struct:

struct Iface {
    Itab*   tab;
    void*   data;
};
Salin selepas log masuk

Sekarang, mari analisa kedua-dua panggilan fungsi dalam kod yang disediakan:

<code class="go">yes([]int{}) // output: true
no([]int{})  // output: false</code>
Salin selepas log masuk

yes Fungsi:

In fungsi ya, nilai []int{} diluluskan sebagai perkara parameter. Memandangkan ya hanya menerima parameter hirisan, pengkompil menganggap nil sebagai hirisan nilai sifar. Oleh itu, perkara perbandingan == nil menjadi nil == nil, yang kembali benar.

tiada Fungsi:

Sebaliknya, no fungsi mengharapkan antara muka{} parameter. Apabila anda menghantar nilai []int{}, Go secara automatik membalutnya dalam jenis antara muka{}. dengan berkesan menukarnya kepada antara muka{[]int, nil}. Perkara perbandingan == nil kini menilai kepada antara muka{[]int, nil} == nil, yang menghasilkan palsu.

Tingkah laku ini diperjelaskan lagi dalam Soalan Lazim Go, yang menerangkan bahawa "antara muka yang mengandungi nil hanyalah sama dengan nol jika semua ahli mereka adalah nol" (iaitu dalam kes contoh ini, []int (ahli jenis) tidak boleh menjadi nil).

Oleh itu, apabila berurusan dengan kepingan nil dalam antara muka, ia adalah penting untuk mengetahui sifat aneh ini dan mempertimbangkan pelaksanaan asas untuk mentafsir tingkah laku dengan betul.

Atas ialah kandungan terperinci Mengapa Slice Nil Dilalui ke Antara Muka dalam Tidak Sama Nil?. 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