Jenis Mengekang untuk Kebolehindeksan dalam Go Generik
Pengindeksan ialah operasi asas dalam banyak senario pengaturcaraan. Apabila bekerja dengan generik, adalah berfaedah untuk mengekang parameter jenis generik kepada jenis yang menyokong pengindeksan. Ini memastikan bahawa jenis asas boleh diakses dan diubah suai menggunakan sintaks subskrip biasa.
Salah satu cara untuk mencapai ini adalah melalui penggunaan kekangan antara muka. Antara muka mentakrifkan satu set operasi yang diperlukan untuk sesuatu jenis untuk dilaksanakan. Dalam kes ini, kami boleh mentakrifkan antara muka bernama Boleh Diindeks yang mewakili jenis yang menyokong pengindeksan melalui pengendali subskrip:
<code class="go">type Indexable interface { ~[]byte | ~string }</code>
Dengan menggunakan operator ~, kami membenarkan antara muka menerima kedua-dua jenis secara terus dan penunjuk kepada mereka jenis. Ini memberi kita kefleksibelan untuk bekerja dengan sama ada nilai atau semantik rujukan.
Seterusnya, kita boleh mencipta fungsi generik yang mengambil jenis Boleh Indeks sebagai parameter. Fungsi ini boleh melakukan operasi pada jenis yang melibatkan pengindeksan:
<code class="go">func GetAt[T Indexable](v T, i int) byte { return v[i] }</code>
Fungsi GetAt mengembalikan nilai bait pada indeks yang ditentukan. Ia boleh digunakan dengan mana-mana jenis yang melaksanakan antara muka Boleh Indeks, termasuk tatasusunan bait dan rentetan:
<code class="go">var data []byte = []byte{1, 2, 3, 4, 5} result := GetAt(data, 2) // result is 3</code>
Adalah penting untuk ambil perhatian bahawa menggunakan kekangan kesatuan mengehadkan set operasi yang boleh digunakan dalam fungsi. Ini kerana kekangan kesatuan mengehadkan hujah jenis kepada hujah yang berkongsi set operasi biasa.
Kesimpulannya, menggunakan kekangan antara muka yang mewakili kebolehindeksan boleh menjadi teknik yang berguna untuk mengekang jenis generik. Ia membolehkan anda menulis kod generik yang boleh beroperasi pada sebarang jenis yang menyokong pengindeksan.
Atas ialah kandungan terperinci Bagaimana untuk Mengekang Jenis untuk Kebolehindeksan dalam Go Generics?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!