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

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

Barbara Streisand
Barbara Streisandasal
2024-11-04 01:28:03217semak imbas

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;
};

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

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

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!

Kenyataan:
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