Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bila hendak menggunakan Slice Arguments Terkandas kepada Slice Type vs. Generic Slice Arguments dalam Go?

Bila hendak menggunakan Slice Arguments Terkandas kepada Slice Type vs. Generic Slice Arguments dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-24 04:55:30364semak imbas

When to Use Slice Arguments Constrained to Slice Types vs. Generic Slice Arguments in 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!

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