Heim >Backend-Entwicklung >Golang >Wie greife ich bei Verwendung von Zeigern auf eingebettete Felder in Go-Strukturen zu?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-01 14:17:02404Durchsuche

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>

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>

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>

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

&{0x10328100 {4}}
&{342} 342
{4} 4

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!

Stellungnahme:
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