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
Barbara Streisandasal
2024-12-15 17:10:11231semak imbas

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
}

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!

Kenyataan:
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