Go 1.18 中引入了泛型,可建立獨立於類型的程式碼。泛型使用方括號 [] 定義型別參數,如 func Sort[T any](arr []T)。 Go 編譯器可以推斷型別參數,如 func Swap[T](x, y T)。泛型可用來建構資料結構,如二叉查找樹 type Node[T any] struct { … },並施加型別約束,如 type Node[T comparable] struct { … }。 Go 泛型提高了程式碼的靈活性,而不會產生新的類型。
在Go 1.18 中,Go 語言引入了備受期待的功能:泛型。泛型可讓您建立獨立於具體類型的資料結構和演算法,從而提高程式碼的可重複使用性和靈活性。
泛型使用方括號[]
來定義,其中包含任意數量的類型參數:
func Sort[T any](arr []T)
在上面的範例中,T
是型別參數,代表可以是任何型別的項。
如果函數的泛型類型參數可以在上下文中推斷出來,則可以省略它們:
func Swap[T](x, y T)
此函數可以與任何類型的兩個參數一起使用,Go 編譯器會推斷T
應該是x
和y
的型別。
讓我們建立一個二元查找樹的泛型版本:
type Node[T any] struct { Value T Left *Node[T] Right *Node[T] } func Insert[T comparable](n *Node[T], value T) *Node[T] { // ... } func Search[T comparable](n *Node[T], value T) *Node[T] { // ... }
這個二元查找樹允許我們儲存和搜尋任何可比較類型的元素。
有時,您需要對類型參數施加約束。例如,為了確保在二元查找樹中比較兩個值是有效的,我們可以要求T
實作了comparable
介面:
type Node[T comparable] struct { // ... }
Go 泛型為 Go 語言帶來了強大的新功能。了解如何定義和使用泛型是提高程式碼靈活性和可重複使用性的關鍵。
以上是Golang泛型的定義與應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!