首頁 >後端開發 >Golang >Golang 泛型排除切片或陣列類型

Golang 泛型排除切片或陣列類型

WBOY
WBOY轉載
2024-02-13 11:00:19730瀏覽

Golang 泛型排除切片或数组类型

php小編小新今天為大家帶來一篇關於Golang泛型的文章。在Golang中,泛型是一項備受期待的功能,然而最新的提案中卻排除了對切片或陣列類型的支援。本文將為大家解析這個決定的原因,並探討對開發者的影響。讓我們一起來深入了解吧!

問題內容

我有一個 Go 中具有泛型的函數,該函數不應應用於切片或陣列。但我不知道該怎麼做。我找到了這方面的例子,但僅限於 Typescript,這並沒有讓我更進一步。舉個例子,我想要某物。像:

func sth[T everything_but_slices_or_arrays](arg T) { ...doSth... }

解決方法

您可以使用comparable 約束到達一半,因為切片不實作此介面:

func foo[t comparable](arg t) {
    fmt.printf("%#v\n", arg) // for example
}


func main() {
    i := []int{42}
    foo(i) // <- compiler error: []int does not satisfy comparable
}

但是,陣列(類似型別)是:

func foo[t comparable](arg t) {
    fmt.printf("%#v\n", arg) // for example
}


func main() {
    i := [1]int{42}
    foo(i)

將編譯並運行以產生輸出:

[1]int{42}

因此,這可能取決於在函數中排除切片和陣列的重要性,而這又取決於您的泛型函數的作用。

更常見的做法可能是僅將通用函數限制在確保函數可以執行其想要的操作所需的範圍內。即,如果函數需要能夠比較通用類型的參數,則 comparable 約束有意義,但如果函數不需要任何特定功能,則讓它接受 any

如果您只是不想將函數與某種類型(或多個類型)的值任意一起使用,即使就函數的功能而言這樣做沒有任何問題,那麼這可以透過其他方式(程式碼審查、拉取請求等)得到更好的監管和監管。

如果不確切知道你的通用函數要做什麼,很難確定。 :)

以上是Golang 泛型排除切片或陣列類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除