Heim >Backend-Entwicklung >Golang >Wie greifen Sie in Go auf eingebettete Strukturfelder zu, wenn es sich um Zeiger handelt?
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!