Wie greife ich bei Verwendung von Zeigern auf eingebettete Felder in Go-Strukturen zu?

Mary-Kate Olsen
Freigeben: 2024-11-01 14:17:02
Original
309 Leute haben es durchsucht

How to Access Embedded Fields in Go Structs When Using Pointers?

Zugriff auf eingebettete Felder von Strukturtypen

In Go können Strukturen andere Strukturtypen einbetten. Allerdings kann der Zugriff auf eingebettete Felder für Anfänger manchmal eine Herausforderung sein. Betrachten Sie den folgenden Codeausschnitt:

<code class="go">type Engine struct {
    power int
}

type Tires struct {
    number int
}

type Cars struct {
    *Engine
    Tires
}</code>
Nach dem Login kopieren

Hier bettet die Cars-Struktur den Zeigertyp *Engine ein. Der Versuch, den Code zu kompilieren, führt zu folgendem Fehler:

<code class="go">panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x23bb]</code>
Nach dem Login kopieren

Dieser Fehler tritt auf, weil das Engine-Feld in der Cars-Struktur ein Zeiger ist und als Null initialisiert wird. Um auf das Leistungsfeld der eingebetteten Engine zuzugreifen, müssen wir das Engine-Feld explizit initialisieren:

<code class="go">package main

import "fmt"

type Engine struct {
    power int
}

type Tires struct {
    number int
}

type Cars struct {
    *Engine
    Tires
}

func main() {
    car := new(Cars)
    car.Engine = new(Engine) // Initialize the Engine field
    car.power = 342
    car.number = 4
    fmt.Println(car)
    fmt.Println(car.Engine, car.power)
    fmt.Println(car.Tires, car.number)
}</code>
Nach dem Login kopieren

Jetzt wird der Code erfolgreich kompiliert und ausgeführt und erzeugt die folgende Ausgabe:

&{0x10328100 {4}}
&{342} 342
{4} 4
Nach dem Login kopieren

Wie Sie sehen können, konnten wir auf das Power-Feld der eingebetteten Engine-Struktur zugreifen, indem wir das Engine-Feld in der Cars-Struktur explizit initialisierten. Dies ist in Go eine gängige Praxis, wenn mit eingebetteten Strukturen gearbeitet wird.

Das obige ist der detaillierte Inhalt vonWie greife ich bei Verwendung von Zeigern auf eingebettete Felder in Go-Strukturen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!