Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencipta Objek Baharu Jenis Tertentu Menggunakan Generik dalam Go 1.18?
Generik dalam Go 1.18 beta menawarkan cara yang berkuasa untuk mencipta kod yang fleksibel dan boleh digunakan semula. Satu tugas biasa ialah mencipta objek baharu daripada jenis tertentu. Walau bagaimanapun, melaksanakan fungsi ini memerlukan sedikit pemahaman tentang sintaks generik.
Kod di bawah mentakrifkan FruitFactory dengan parameter jenis generik T. Kaedah Cipta cuba mencipta contoh baharu T (cth., *Apple), tetapi pada masa ini mengembalikan sifar, menyebabkan program ranap apabila mengakses sifat objek.
type FruitFactory[T any] struct{} func (f FruitFactory[T]) Create() *T { // How to create a non-nil fruit here? return nil } type Apple struct { color string } func example() { appleFactory := FruitFactory[Apple]{} apple := appleFactory.Create() // Panics because nil pointer access apple.color = "red" }
Memandangkan Apple ialah jenis bukan penunjuk, kita hanya boleh mengisytiharkan pembolehubah jenis T dan mengembalikan alamatnya:
func (f FruitFactory[T]) Create() *T { var a T return &a }
Sebagai alternatif, new(T) boleh digunakan untuk mencipta tika baharu dan mengembalikannya penunjuk:
func (f FruitFactory[T]) Create() *T { return new(T) }
Dengan perubahan ini, kaedah Cipta kini mengembalikan objek jenis T yang sah, menyelesaikan isu penunjuk sifar.
Jika FruitFactory digunakan dengan jenis penunjuk, penyelesaian yang lebih kompleks diperlukan untuk mengelakkan kesalahan pembahagian. Antara muka tersuai, Ptr, diperlukan untuk mengekang jenis penuding dalam parameter jenis:
// Constraining a type to its pointer type type Ptr[T any] interface { *T } // The first type parameter will match pointer types and infer U type FruitFactory[T Ptr[U], U any] struct{} func (f FruitFactory[T,U]) Create() T { // Declare var of non-pointer type. This is not nil! var a U // Address it and convert to pointer type (still not nil) return T(&a) }
Dengan persediaan ini, kemungkinan untuk mencipta contoh baharu jenis penuding dalam kilang generik, menghalang kesilapan pembahagian.
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Objek Baharu Jenis Tertentu Menggunakan Generik dalam Go 1.18?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!