Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Generik dalam Go 1.18 Boleh Menyelesaikan Masalah Mencipta Nilai Ditaip Tanpa Menyebabkan Ranap Program?
Cara Menggunakan Generik dalam Go 1.18 untuk Mencipta Nilai Ditaip
Dalam pengaturcaraan Go, generik membolehkan penciptaan kod yang beroperasi pada pelbagai jenis tanpa memerlukan pemutus eksplisit atau penegasan jenis. Artikel ini meneroka cara menggunakan generik dalam Go 1.18 untuk mencipta objek baharu dengan nilai yang ditaip.
Latar Belakang: Contoh Kilang Buah
Pertimbangkan contoh ringkas "Kilang Buah" berikut yang cuba mencipta contoh baru buah-buahan secara umum:
type FruitFactory[T any] struct{} func (f FruitFactory[T]) Create() *T { // How do we create a non-nil fruit here? // Returning nil crashes the example. return nil } type Apple struct { color string }
Dalam contoh ini, tugasnya adalah untuk melengkapkan fungsi Cipta untuk mencipta contoh baharu jenis T (iaitu, *Apple dalam kes jenis Apple). Walau bagaimanapun, hanya mengembalikan sifar tidak mencukupi dan menyebabkan program ranap apabila mengakses sifat objek.
Penyelesaian: Mencipta Objek Ditaip
Terdapat dua cara utama untuk mencipta tika baharu nilai yang ditaip menggunakan generik dalam Go 1.18:
func (f FruitFactory[T]) Create() *T { var a T return &a }
func (f FruitFactory[T]) Create() *T { return new(T) }
Penyelesaian ini membenarkan fungsi mencipta nilai bukan penuding (a atau baru(T)) dan, jika perlu, tukarkannya kepada jenis penuding dengan mengembalikan alamatnya ( &a).
Contoh Pelaksanaan
Dalam "Kilang Buah-buahan" contoh:
func (f FruitFactory[T]) Create() *T { var a T return &a } func example() { appleFactory := FruitFactory[Apple]{} apple := appleFactory.Create() apple.color = "red" // No panic now }
Pengubahsuaian ini membolehkan penciptaan objek Apple baharu dan menetapkan sifatnya tanpa menghadapi kesalahan pembahagian.
Kesimpulan
Dengan generik dalam Go 1.18, pengaturcaraan dengan nilai ditaip sangat dipermudahkan. Dengan memanfaatkan penugasan deklaratif atau kata kunci baharu, adalah mungkin untuk mencipta contoh baharu dalam sebarang jenis dengan lancar, menghapuskan keperluan untuk penghantaran manual dan penegasan jenis yang terdedah kepada ralat.
Atas ialah kandungan terperinci Bagaimanakah Generik dalam Go 1.18 Boleh Menyelesaikan Masalah Mencipta Nilai Ditaip Tanpa Menyebabkan Ranap Program?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!