Mengekang Jenis kepada Jenis Boleh Diindeks dalam Go Generik
Dalam Go 1.18, pengenalan generik telah membuka kemungkinan baharu untuk keselamatan jenis. Satu senario yang biasa dihadapi ialah keperluan untuk mengehadkan jenis yang dibenarkan kepada jenis yang menyokong pengindeksan, seperti tatasusunan, kepingan, peta dan rentetan.
Adakah Kebolehindeksan Satu Kekangan?
Walaupun pengindeksan adalah ciri yang diingini untuk banyak jenis, itu sendiri bukanlah kekangan yang boleh ditentukan secara langsung. Kekangan dalam generik Go ditentukan menggunakan set jenis, yang mentakrifkan jenis yang dibenarkan.
Kekangan Pengindeksan Bermakna
Satu-satunya kekangan pengindeksan yang bermakna menggunakan set jenis kesatuan ialah Boleh Diindeks, yang mengehadkan jenis yang dibenarkan kepada sama ada []bait atau rentetan. Kekangan ini membolehkan takrifan fungsi generik yang menerima kedua-dua jenis dan melaksanakan operasi pengindeksan.
Had Kekangan Pengindeksan
Jenis boleh diindeks berpotensi lain, seperti tatasusunan dan peta, tidak boleh digabungkan secara bermakna dalam set jenis kesatuan. Operasi yang dibenarkan pada jenis gabungan hanyalah yang disokong oleh semua jenis ahli dan kekangan memerlukan jenis kunci dan elemen yang sama untuk pengindeksan.
Pelaksanaan Praktikal
Akibatnya , satu-satunya kekangan pengindeksan praktikal ialah Boleh diindeks untuk []bait dan rentetan. Ini membenarkan fungsi generik yang beroperasi pada kedua-dua jenis, seperti fungsi GetAt yang disediakan dalam jawapan, yang mengembalikan bait pada indeks tertentu.
Nota Tambahan
Adalah penting untuk ambil perhatian bahawa kekangan boleh indeks tidak menyokong operasi julat kerana ia tidak mempunyai jenis teras. Walau bagaimanapun, jenis []bait dan rentetan kedua-duanya mempunyai keupayaan julat dan boleh digunakan di mana operasi julat diperlukan.
Atas ialah kandungan terperinci Bolehkah Go Generics Menguatkuasakan Kekangan Pengindeksan Melangkaui `[]bait` dan `rentetan`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!