Rumah >pembangunan bahagian belakang >Golang >Bila hendak menggunakan ~[]E dan []E Type Parameters untuk Slice Arguments dalam Go?

Bila hendak menggunakan ~[]E dan []E Type Parameters untuk Slice Arguments dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-10-24 01:47:01971semak imbas

When to Use ~[]E and []E Type Parameters for Slice Arguments in Go?

Perbezaan Antara Argumen Slice Generik

Kepingan pakej percubaan Go, dua fungsi, Mengandungi dan Tumbuh, mempunyai parameter jenis yang berbeza untuk argumen pertamanya. Mengandungi mengambil sepotong elemen setanding ([]E), manakala Grow mengambil hujah yang terhad kepada jenis kepingan (~[]E).

Pertimbangan Praktikal

Sementara pengisytiharan ini mungkin kelihatan setara dalam amalan, ia berbeza apabila anda perlu mengembalikan sekeping jenis yang sama seperti argumen input.

Bila Gunakan ~[]E Type Parameter

Gunakan ~[]E apabila anda perlu mengembalikan kepingan jenis yang sama (mungkin dinamakan) sebagai hujah. Contohnya, jika anda ingin mencipta fungsi generik yang menumbuhkan hirisan jenis bernama tertentu:

<code class="go">func Grow[S ~[]E, E any](s S, n int) S {
    // ...
}</code>

Bila Gunakan []Parameter Jenis E

Gunakan []E apabila anda tidak perlu memulangkan kepingan atau apabila mengembalikan kepingan yang tidak dinamakan boleh diterima:

<code class="go">func Contains[E comparable](s []E, v E) bool {
    // ...
}</code>

Demonstrasi

Pertimbangkan dua pelaksanaan Grow ():

<code class="go">// Using ~[]E
func Grow[S ~[]E, E any](s S, n int) S {
    // ...
}

// Using []E
func Grow2[E any](s []E, n int) []E {
    // ...
}</code>

Apabila menghantar jenis kepingan tersuai (mempunyai kepingan sebagai jenis asasnya), Grow() boleh mengembalikan nilai jenis yang sama, manakala Grow2() tidak boleh dan mengembalikan kepingan yang tidak dinamakan jenis.

Output:

x2 []int len=1 cap=12
x3 []int len=1 cap=12
y2 main.ints len=1 cap=12
y3 []int len=1 cap=12

Seperti yang dilihat di atas, Grow2(y, 10) mengembalikan sepotong jenis yang tidak dijangka, yang mungkin tidak diingini.

Atas ialah kandungan terperinci Bila hendak menggunakan ~[]E dan []E Type Parameters untuk 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