Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Kami Boleh Mengekang Jenis Boleh Diindeks dengan Berkesan dalam Go 1.18 Generik?

Bagaimanakah Kami Boleh Mengekang Jenis Boleh Diindeks dengan Berkesan dalam Go 1.18 Generik?

Patricia Arquette
Patricia Arquetteasal
2024-10-30 03:49:28779semak imbas

How Can We Effectively Constrain Indexable Types in Go 1.18 Generics?

Mengindeks Kekangan dalam Go 1.18 Generik

Dengan pengenalan generik dalam Go 1.18, pembangun mempunyai peluang untuk melaksanakan algoritma yang berfungsi dengan khusus jenis. Satu keperluan biasa ialah menggunakan jenis yang menyokong pengindeksan, seperti tatasusunan, kepingan, peta dan rentetan.

Kekangan Boleh Indeks

Untuk mengehadkan parameter jenis kepada jenis boleh diindeks , pertimbangkan untuk menggunakan kekangan berikut dengan kesatuan:

<code class="go">type Indexable interface {
    ~[]byte | ~string
}</code>

Had Kekangan Boleh Indeks

Walaupun kekangan di atas berfungsi untuk mengindeks bait dan rentetan, terdapat had untuk menggunakannya dengan jenis boleh diindeks lain, seperti peta dan tatasusunan:

  • Peta: Kesatuan mesti mengandungi hanya jenis peta dengan jenis kunci dan elemen yang sama. Sekatan ini menjadikannya tidak praktikal untuk algoritma generik yang mesti mengendalikan peta dengan kunci dan nilai yang berbeza.
  • Tatasusunan: Panjang tatasusunan ialah sebahagian daripada jenisnya, jadi kesatuan perlu menentukan semua panjang yang mungkin. Ini boleh menyusahkan dan terdedah kepada ralat di luar sempadan.

Pendekatan Alternatif

Disebabkan batasan ini, satu-satunya kesatuan praktikal yang menyokong pengindeksan ialah []bait | rentetan. Kesatuan ini membenarkan operasi pengindeksan tetapi tidak menyokong operasi julat kerana ia tidak mempunyai jenis teras.

Contoh Penggunaan

Contoh berikut menunjukkan cara menggunakan kekangan Boleh Indeks:

<code class="go">func GetAt[T Indexable](v T, i int) byte {
    return v[i]
}</code>

Fungsi ini mengambil nilai boleh diindeks dan indeks serta mengembalikan bait pada indeks yang ditentukan.

Kesimpulan

Sementara Go 1.18 menyediakan satu cara untuk mengekang jenis kepada jenis boleh diindeks menggunakan kesatuan, pengehadan kekangan itu bermakna ia hanya praktikal untuk set kes penggunaan terhad, iaitu mengindeks bait dan rentetan.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengekang Jenis Boleh Diindeks dengan Berkesan dalam Go 1.18 Generik?. 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