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!