Accès aux champs de structure intégrés
Dans Go, les structures peuvent avoir des champs intégrés, qui permettent à une structure de réutiliser les champs d'une autre structure. Cependant, l'accès à ces champs intégrés peut parfois prêter à confusion.
Considérez le code suivant :
<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>
Lors de la compilation, vous pouvez rencontrer l'erreur :
runtime error: invalid memory address or nil pointer dereference
Comprendre les champs intégrés
Pour accéder au champ de puissance dans la structure du moteur intégré, vous ne pouvez pas utiliser directement car.power. Les champs intégrés sont accessibles indirectement via un pointeur ou une valeur intermédiaire.
Solution
Une façon de résoudre l'erreur consiste à attribuer un nouveau moteur au champ intégré dans les voitures. 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>
Output
&{0x10328100 {4}} &{342} 342 {4} 4
Dans ce code modifié, car.Engine pointe désormais vers une structure Engine valide, vous permettant d'accéder au champ de puissance .
Remarque : Vous pouvez également accéder aux champs intégrés à l'aide de la réflexion ou d'autres techniques avancées, mais l'approche ci-dessus est généralement la plus simple.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!