Maison >développement back-end >Golang >Comment accéder aux champs intégrés dans les structures Go lors de l'utilisation de pointeurs ?

Comment accéder aux champs intégrés dans les structures Go lors de l'utilisation de pointeurs ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 14:17:02402parcourir

How to Access Embedded Fields in Go Structs When Using Pointers?

Accès aux champs intégrés de type de structure

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn