首頁 > 後端開發 > Golang > 何時在 Go 中使用 ~[]E 和 []E 類型參數作為切片參數?

何時在 Go 中使用 ~[]E 和 []E 類型參數作為切片參數?

Patricia Arquette
發布: 2024-10-24 01:47:01
原創
968 人瀏覽過

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

通用切片參數之間的差異

在 Go 的實驗包切片中,兩個函數 Contains 和 Grow 的第一個參數具有不同的類型參數。 Contains 接受可比較元素的切片 ([]E),而 Grow 接受限制為切片類型的參數 (~[]E)。

實際注意事項

而這些聲明在實踐中可能看起來是等效的,但當您需要返回與輸入參數相同類型的切片時,它們會有所不同。

何時使用 ~[]E 類型參數

當您必須傳回與參數類型相同(可能命名)的切片時,請使用 ~[]E。例如,如果您想要建立一個產生特定命名類型切片的泛型函數:

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

何時使用[]E 類型參數

當不需要傳回切片或可以接受返回未命名切片時,請使用[]E:

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

示範

考慮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>
登入後複製

當傳遞自訂切片類型(以切片作為其基礎類型)時,Grow() 可以傳回相同類型的值,而Grow2() 不能傳回一個未命名的切片type.

輸出:

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
登入後複製

如上所示,Grow2(y, 10) 傳回意外類型的切片,這可能是不可取的。

以上是何時在 Go 中使用 ~[]E 和 []E 類型參數作為切片參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板