Heim  >  Artikel  >  Backend-Entwicklung  >  So erstellen Sie einen Wert aus einem Nullzeiger

So erstellen Sie einen Wert aus einem Nullzeiger

PHPz
PHPznach vorne
2024-02-09 10:50:09968Durchsuche

如何从 nil 指针创建值

Der PHP-Editor Youzi zeigt Ihnen, wie Sie aus einem Nullzeiger einen Wert erstellen. In der Programmierung ist ein Nullzeiger ein Zeiger, der auf keine gültige Speicheradresse zeigt. Normalerweise können wir aus einem Nullzeiger keinen Wert erstellen, da dieser auf keinen gültigen Speicherplatz zeigt. Einige Programmiersprachen bieten jedoch eine spezielle Handhabung, die es uns ermöglicht, Werte aus Nullzeigern zu erstellen. In diesem Artikel besprechen wir, wie man mit dieser besonderen Situation umgeht und wie man potenzielle Probleme und Fehler vermeidet. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel bietet Ihnen hilfreiche Anleitungen und Ratschläge.

Frageninhalt

Berücksichtigen Sie in Go 1.19 die folgende Definition:

type A struct{}
type B struct{}

type Field interface {
    *A | *B
}

type Person[T Field] struct {
    field T
}

Kann ich bei einer Null Field den zugrunde liegenden Wert dynamisch erstellen?

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

  }
}

Lösung

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

Weitere Informationen finden Sie in der Dokumentation:

Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen Wert aus einem Nullzeiger. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen