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

Patricia Arquette
Lepaskan: 2024-10-24 01:47:01
asal
860 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!