在Go 中,語言中缺少null 值在傳回空值或預設值時帶來了挑戰泛型類型。
考慮以下泛型列表實作:
type mylist[T any] struct { first *node[T] } type node[T any] struct { data T next *next[T] }
在這個例子中,我們可以定義從列表中彈出和檢索第一個元素的方法:
func (list *mylist[T]) pop() T { if list.first != nil { data := list.first.data list.first = list.first.next return data } return nil } func (list *mylist[T]) getfirst() T { if list.first != nil { return list.first.data } return nil }
但是,在編譯此程式碼時,編譯器會引發錯誤:「不能在return 語句中使用nil 作為 T 值。
我們可以為所使用的特定型別 T 傳回零值,而不是傳回 nil在通用列表中。零值為:
為了整數與浮點數為0
func getZero[T any]() T { var result T return result }
為了實現這一點,我們可以聲明一個 T類型的變數並傳回it:
i := getZero[int]() fmt.Printf("%T %v\n", i, i) s := getZero[string]() fmt.Printf("%T %q\n", s, s) p := getZero[image.Point]() fmt.Printf("%T %v\n", p, p) f := getZero[*float64]() fmt.Printf("%T %v\n", f, f)
此函數現在可用於傳回任何泛型類型的零值。例如,我們可以針對不同類型對其進行測試:
int 0 string "" image.Point (0,0) *float64 <nil>
輸出:
此解決方案可讓您為Go 中的任何泛型類型傳回正確的默認值或空值。以上是如何處理 Go 中泛型類型的預設值回傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!