Editor PHP Youzi akan memperkenalkan anda cara mencipta nilai daripada penunjuk sifar. Dalam pengaturcaraan, penunjuk nil ialah penunjuk yang tidak menunjuk kepada mana-mana alamat memori yang sah. Biasanya, kita tidak boleh mencipta nilai daripada penuding nol kerana ia tidak menghala ke mana-mana ruang memori yang sah. Walau bagaimanapun, sesetengah bahasa pengaturcaraan menyediakan pengendalian khas yang membolehkan kami mencipta nilai dari penunjuk nol. Dalam artikel ini, kita akan membincangkan cara mengendalikan situasi khusus ini dan cara mengelakkan masalah dan ralat yang berpotensi. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan memberikan anda bimbingan dan nasihat yang berguna.
Dalam Go 1.19, pertimbangkan definisi berikut:
type A struct{} type B struct{} type Field interface { *A | *B } type Person[T Field] struct { field T }
Memandangkan tiada Field
, bolehkah saya mencipta nilai asasnya secara dinamik?
func (p Person[T]) do() { if p.field == nil { // Can I make a value here that will be *A or *B dynamically depending on T? // Something that would be equivalent to new(A) or new(B) p.field = ? } }
func (p Person[T]) do() { if p.field == nil { // assuming T is a pointer type, e.g. *A pp := new(T) // initialize an instance of **A rt := reflect.TypeOf(pp) // get the reflect.Type representation of **A rt = rt.Elem() // get the reflect.Type representation of *A rt = rt.Elem() // get the reflect.Type representation of A rv := reflect.New(rt) // initialize reflect.Value representation of *A v := rv.Interface() // get the interface{}(*A) instance from reflect.Value t := v.(T) // type assert the interface's dynamic type p.field = t } }
https://www.php.cn/link/ccd2d123f4ec4d777fc6ef757d0fb642
Untuk maklumat lanjut, sila lihat dokumentasi:
reflect.TypeOf
Dapatkan maklumat jenis nilai yang ditentukanreflect.Type.Elem
Dapatkan jenis elemen jenis
reflect.New
Mengembalikan penuding kepada nilai sifar jenis yang ditentukan
reflect.Value.Interface
pulangkan nilai sebagai antara muka{} v.(T)
Taip penegasanAtas ialah kandungan terperinci Bagaimana untuk mencipta nilai daripada penunjuk nil. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!