Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mencipta nilai daripada penunjuk nil

Bagaimana untuk mencipta nilai daripada penunjuk nil

PHPz
PHPzke hadapan
2024-02-09 10:50:09967semak imbas

如何从 nil 指针创建值

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.

Kandungan soalan

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 = ?

  }
}

Penyelesaian

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:

Atas ialah kandungan terperinci Bagaimana untuk mencipta nilai daripada penunjuk nil. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam