Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mencipta Objek Jenis Tertentu dalam Fungsi Generik dalam Go 1.18?

Bagaimanakah Saya Boleh Mencipta Objek Jenis Tertentu dalam Fungsi Generik dalam Go 1.18?

Barbara Streisand
Lepaskan: 2024-12-15 17:10:11
asal
230 orang telah melayarinya

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

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

Pendekatan 2: Menggunakan "baharu" Fungsi

Sebagai alternatif, fungsi "baharu" boleh digunakan untuk mencipta objek baharu:

func (f FruitFactory[T]) Create() *T {
    return new(T)
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan