Menghalang Jenis daripada Berkhidmat sebagai Kunci Peta
Walaupun sesetengah jenis boleh berfungsi sebagai kunci peta, pembangun mungkin ingin menghalang perkara ini penggunaan. Walaupun mengandaikan bahawa ahli persendirian akan melarang kejadian sedemikian, ini terbukti tidak mencukupi. Artikel ini meneroka pendekatan terbaik untuk menjadikan jenis tidak boleh digunakan sebagai kunci peta.
Membandingkan Jenis Kunci Peta
Spesifikasi teknikal untuk jenis peta memberi mandat bahawa mereka mampu perbandingan melalui operator == dan !=. Ini menunjukkan bahawa jenis kunci mestilah bukan fungsi, peta atau kepingan. Mengeksploitasi keperluan ini menjadi kunci untuk menghalang penggunaan kunci peta.
Memperkenalkan Medan Tiada Perbandingan
Nilai struktur, ditakrifkan oleh medannya, hanya boleh dibandingkan jika semua medan tersebut setanding . Oleh itu, memperkenalkan medan jenis yang tiada tandingan dengan berkesan membatalkan kelayakan struct daripada berfungsi sebagai kunci peta. Pilihan yang mudah ialah menambah medan hirisan jenis, kerana ia diisytiharkan secara eksplisit sebagai tiada tandingan.
Contoh Kod
Pertimbangkan pengubahsuaian berikut pada jenis yang disediakan:
<code class="go">type MyType struct { A *A b b notComparable []int }</code>
Dengan kemasukan medan notComparable, percubaan untuk menggunakan MyType sebagai kunci peta akan mengakibatkan ralat masa kompilasi:
<code class="go">m := map[MyType]int{}</code>
Ralat Penyusunan: "kunci peta tidak sah taip MyType"
Pertimbangan Tambahan
Perlu diingat bahawa menghapuskan penggunaan kunci peta untuk jenis juga menghapuskan pilihan untuk membandingkan nilainya. Ini disebabkan oleh pengenalan bidang yang tiada tandingannya. Untuk mengurangkan isu ini, jenis pembungkus boleh diperkenalkan untuk menyembunyikan medan yang tiada tandingan sambil mengekalkan kebolehbandingan untuk jenis asal.
Atas ialah kandungan terperinci Berikut ialah beberapa pilihan tajuk, setiap satu menekankan aspek artikel yang berbeza: Memberi tumpuan kepada Masalah: * Bagaimana untuk Menghalang Jenis daripada Digunakan sebagai Kunci Peta dalam Go? * Mengapa Anda Tidak Boleh Menggunakan MyStruct a. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!