Maison > Article > développement back-end > Comment accéder aux champs intégrés dans les structures Go lors de l'utilisation de pointeurs ?
Dans Go, les structures peuvent intégrer d'autres types de structures. Cependant, accéder aux champs intégrés peut parfois s’avérer un défi pour les débutants. Considérez l'extrait de code suivant :
<code class="go">type Engine struct { power int } type Tires struct { number int } type Cars struct { *Engine Tires }</code>
Ici, la structure Cars intègre le type de pointeur *Engine. Toute tentative de compilation du code entraîne l'erreur suivante :
<code class="go">panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x23bb]</code>
Cette erreur se produit car le champ Engine dans la structure Cars est un pointeur et est initialisé à zéro. Pour accéder au champ d'alimentation du moteur intégré, nous devons initialiser explicitement le champ Moteur :
<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>
Maintenant, le code sera compilé et exécuté avec succès, produisant le résultat suivant :
&{0x10328100 {4}} &{342} 342 {4} 4
Comme vous pouvez le voir, nous avons pu accéder au champ de puissance de la structure Engine intégrée en initialisant explicitement le champ Engine dans la structure Cars. Il s'agit d'une pratique courante dans Go lorsque vous travaillez avec des structures intégrées.
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!