首頁 > 後端開發 > Golang > 如何在 Go 1.18 中的泛型函數中建立特定類型的物件?

如何在 Go 1.18 中的泛型函數中建立特定類型的物件?

Barbara Streisand
發布: 2024-12-15 17:10:11
原創
229 人瀏覽過

How Can I Create Objects of a Specific Type within a Generic Function in Go 1.18?

在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中文網其他相關文章!

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