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

So erstellen Sie einen Wert aus einem Nullzeiger

PHPz
Freigeben: 2024-02-09 10:50:09
nach vorne
1012 Leute haben es durchsucht

如何从 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
}
Nach dem Login kopieren

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

  }
}
Nach dem Login kopieren

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
    }
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage