Rumah >pembangunan bahagian belakang >Golang >Bila hendak menggunakan Slice Arguments Terkandas kepada Slice Type vs. Generic Slice Arguments dalam Go?
Argumen Slice Generik: Memahami Perbezaan
Dalam Go, pengaturcaraan generik memperkenalkan parameter jenis yang membolehkan fungsi beroperasi pada jenis yang berbeza. Satu bidang yang menarik ialah perbezaan antara hujah hirisan yang terhad kepada jenis hirisan dan argumen hirisan generik.
Argumen hirisan dikekang kepada jenis hirisan
Pertimbangkan hirisan.Tumbuhkan fungsi dengan hujah pertama dikekang oleh ~[]E. Ini bermakna jenis hujah ini mestilah jenis hirisan dengan jenis unsur E.
Argumen Slice Generik
Sebaliknya, pertimbangkan hirisan.Mengandungi fungsi dengan hujah pertama hanya ditaip sebagai []E. Ini membenarkan sebarang jenis hirisan dengan jenis elemen E.
Perbezaan Praktikal
Pada mulanya, nampaknya kedua-dua jenis hujah keping ini berkelakuan serupa, kerana kedua-duanya kedua-duanya membenarkan fungsi mengakses operasi hirisan seperti tambah dan julat. Walau bagaimanapun, terdapat perbezaan yang halus tetapi penting apabila ia datang untuk mengembalikan kepingan.
Memulangkan Sekeping
Jika fungsi memerlukan pengembalian sekeping jenis yang sama seperti hirisan input, anda mesti menggunakan hujah keratan terhad kepada jenis keratan (~[]E). Ini memastikan bahawa kepingan yang dikembalikan mempunyai jenis asas yang betul.
Contoh
Mari kita bandingkan dua pelaksanaan Grow(): satu menggunakan ~[]E dan satu lagi menggunakan [ ]E.
<code class="go">func Grow[S ~[]E, E any](s S, n int) S { // ... } func Grow2[E any](s []E, n int) []E { // ... }</code>
Jika kita menghantar kepingan jenis tersuai (cth., []MyInt), Grow() boleh mengembalikan nilai jenis yang sama. Walau bagaimanapun, Grow2() hanya boleh mengembalikan jenis kepingan generik ([]E).
Kesimpulan
Ringkasnya, jika anda perlu mengembalikan kepingan yang sama taip sebagai hirisan input, anda mesti menggunakan hujah keratan terhad kepada jenis keratan (~[]E). Jika tidak, menggunakan hujah hirisan generik sudah memadai.
Atas ialah kandungan terperinci Bila hendak menggunakan Slice Arguments Terkandas kepada Slice Type vs. Generic Slice Arguments dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!