Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greifen Sie in Go auf eingebettete Strukturfelder zu, wenn es sich um Zeiger handelt?

Wie greifen Sie in Go auf eingebettete Strukturfelder zu, wenn es sich um Zeiger handelt?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-28 21:55:02329Durchsuche

How Do You Access Embedded Struct Fields in Go When They Are Pointers?

Zugriff auf eingebettete Strukturfelder

In Go können Strukturen eingebettete Felder haben, die es einer Struktur ermöglichen, Felder aus einer anderen Struktur wiederzuverwenden. Der Zugriff auf diese eingebetteten Felder kann jedoch manchmal zu Verwirrung führen.

Beachten Sie den folgenden Code:

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

type Tires struct {
    number int
}

type Cars struct {
    *Engine  // embedded pointer-to-struct field
    Tires
}

func main() {
    car := new(Cars)
    car.number = 4
    car.power = 342
    fmt.Println(car)
}</code>

Beim Kompilieren kann der Fehler auftreten:

runtime error: invalid memory address or nil pointer dereference

Eingebettete Felder verstehen

Um auf das Leistungsfeld in der eingebetteten Engine-Struktur zuzugreifen, können Sie car.power nicht direkt verwenden. Auf eingebettete Felder wird indirekt über einen Zwischenzeiger oder -wert zugegriffen.

Lösung

Eine Möglichkeit, den Fehler zu beheben, besteht darin, dem eingebetteten Feld in den Autos eine neue Engine zuzuweisen struct:

<code class="go">package main

import "fmt"

type Engine struct {
    power int
}

type Tires struct {
    number int
}

type Cars struct {
    *Engine  // embedded pointer-to-struct field
    Tires
}

func main() {
    car := new(Cars)
    car.Engine = new(Engine)
    car.power = 342
    car.number = 4
    fmt.Println(car)
    fmt.Println(car.Engine, car.power)
    fmt.Println(car.Tires, car.number)
}</code>

Ausgabe

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

In diesem geänderten Code zeigt car.Engine jetzt auf eine gültige Engine-Struktur, sodass Sie auf das Leistungsfeld zugreifen können .

Hinweis: Sie können auch mithilfe von Reflektion oder anderen fortgeschrittenen Techniken auf eingebettete Felder zugreifen, aber der obige Ansatz ist im Allgemeinen der einfachste.

Das obige ist der detaillierte Inhalt vonWie greifen Sie in Go auf eingebettete Strukturfelder zu, wenn es sich um Zeiger handelt?. 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