Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Anda Menghalang Jenis daripada Digunakan sebagai Kunci Peta dalam Go?

Bolehkah Anda Menghalang Jenis daripada Digunakan sebagai Kunci Peta dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 09:06:30956semak imbas

 Can You Prevent a Type from Being Used as a Map Key in Go?

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!

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