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!