在Go 1.18 中使用類型化泛型建立物件
在Go 1.18 中,泛型允許建立適用於任何資料類型的函數。但是,在泛型函數中建立特定類型的新物件需要特定的語法。
實作 Create 函數
例如,考慮一個函數「Create」應該可以建立結構體「Apple」的一個新實例。要在泛型中實現此目的:
type FruitFactory[T any] struct{} func (f FruitFactory[T]) Create() *T { // How to create non-nil fruit here? return nil // Placeholder, don't return nil } type Apple struct { color string }
方法1:使用類型變數
如果“Apple”不是指標類型,則可以宣告類型變數傳回的位址:
func (f FruitFactory[T]) Create() *T { var a T // Declare variable of type T return &a // Return address of variable }
方法2:使用「new”函數
或者,「new」函數可用於建立新物件:
func (f FruitFactory[T]) Create() *T { return new(T) }
處理指標類型
如果「FruitFactory」是用指標類型實例化的,則更複雜的方法是必要:
// Constraining type to its pointer type type Ptr[T any] interface { *T } // Type parameters: FruitFactory (pointer type), FruitFactory (non-pointer type) type FruitFactory[T Ptr[U], U any] struct{} func (f FruitFactory[T,U]) Create() T { var a U // Declare non-pointer type variable return T(&a) // Convert to pointer type } type Apple struct { color string }
透過遵循這些方法,可以在Go 1.18 中使用泛型建立任何類型的新物件。
以上是如何在 Go 1.18 中的泛型函數中建立特定類型的物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!