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

Linda Hamilton
Lepaskan: 2024-10-27 09:06:30
asal
970 orang telah melayarinya

 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
}
Salin selepas log masuk

Percubaan untuk menggunakan MyType sebagai kunci peta:

m := map[MyType]int{}
Salin selepas log masuk

Akan mengakibatkan ralat masa kompilasi:

invalid map key type MyType
Salin selepas log masuk

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)
Salin selepas log masuk

Ralat masa kompilasi:

invalid operation: p1 == p2 (struct containing []int cannot be compared)
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!