Mencipta Objek Menggunakan Generik Ditaip dalam Go 1.18
Dalam Go 1.18, generik membenarkan penciptaan fungsi yang berfungsi dengan mana-mana jenis data. Walau bagaimanapun, mencipta objek baharu jenis tertentu dalam fungsi generik memerlukan sintaks khusus.
Melaksanakan Fungsi Cipta
Sebagai contoh, pertimbangkan fungsi "Buat" yang harus mencipta contoh baharu bagi struct "Apple." Untuk mencapai ini dalam generik:
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 }
Pendekatan 1: Menggunakan Pembolehubah Jenis
Jika "Apple" bukan jenis penunjuk, pembolehubah yang ditaip boleh diisytiharkan dan alamatnya dikembalikan:
func (f FruitFactory[T]) Create() *T { var a T // Declare variable of type T return &a // Return address of variable }
Pendekatan 2: Menggunakan "baharu" Fungsi
Sebagai alternatif, fungsi "baharu" boleh digunakan untuk mencipta objek baharu:
func (f FruitFactory[T]) Create() *T { return new(T) }
Mengendalikan Jenis Penunjuk
Sekiranya "FruitFactory" digunakan dengan jenis penunjuk, pendekatan yang lebih terlibat ialah perlu:
// 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 }
Dengan mengikuti pendekatan ini, adalah mungkin untuk mencipta objek baharu dalam sebarang jenis menggunakan generik dalam Go 1.18.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Objek Jenis Tertentu dalam Fungsi Generik dalam Go 1.18?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!