Mencegah Penggunaan Jenis sebagai Kunci Peta
Walaupun secara umumnya berfaedah untuk mempunyai jenis yang boleh berfungsi sebagai kunci peta, dalam beberapa keadaan , mungkin perlu untuk menyekat penggunaannya sedemikian. Walaupun mengandaikan kehadiran ahli persendirian dalam sesuatu jenis akan menghalangnya daripada digunakan sebagai kunci peta di luar pakej penentu adalah satu tanggapan yang salah, sebenarnya, ia tidak menawarkan perlindungan sedemikian.
Pendekatan Terbaik untuk Menghalang Penggunaan Kunci Peta
Cara paling berkesan untuk menghalang sesuatu jenis daripada digunakan sebagai kunci peta adalah dengan melanggar spesifikasi untuk jenis peta, yang memberi mandat bahawa jenis kunci mesti membolehkan definisi pengendali perbandingan (== dan != ). Dengan memasukkan medan dalam jenis yang jenisnya dianggap tiada tandingan, seperti kepingan atau fungsi, anda boleh melarang penggunaannya sebagai kunci peta dengan berkesan.
Pertimbangkan contoh berikut:
type MyType struct { S string i int notComparable []int }
Percubaan untuk menggunakan MyType sebagai kunci peta:
m := map[MyType]int{}
Akan mengakibatkan ralat masa kompilasi:
invalid map key type MyType
Akibat Mencegah Penggunaan Kunci Peta
Adalah penting untuk ambil perhatian bahawa dengan mengambil langkah ini, anda akan kehilangan keupayaan untuk membandingkan nilai jenis anda menggunakan operator perbandingan. Sebagai contoh, kod berikut tidak akan berfungsi lagi:
p1, p2 := MyType{}, MyType{} fmt.Println(p1 == p2)
Ralat masa kompilasi:
invalid operation: p1 == p2 (struct containing []int cannot be compared)
Memelihara Perbandingan
Jika anda ingin mengekalkan kebolehbandingan jenis anda sambil menghalang penggunaannya sebagai kunci peta, anda boleh menggunakan teknik yang melibatkan jenis benam dan pembalut. Contohnya:
type myType struct { S string i int } type MyType struct { myType notComparable []int }
Melalui pendekatan ini, myType kekal setanding, manakala jenis pembungkus yang dieksport MyType tidak boleh digunakan sebagai kunci peta.
Atas ialah kandungan terperinci Bolehkah Anda Menghalang Jenis daripada Digunakan sebagai Kunci Peta dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!