Maison > développement back-end > Golang > Comment accéder aux champs Struct intégrés dans Go lorsqu'ils sont des pointeurs ?

Comment accéder aux champs Struct intégrés dans Go lorsqu'ils sont des pointeurs ?

Mary-Kate Olsen
Libérer: 2024-10-28 21:55:02
original
421 Les gens l'ont consulté

How Do You Access Embedded Struct Fields in Go When They Are Pointers?

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>
Copier après la connexion

Lors de la compilation, vous pouvez rencontrer l'erreur :

runtime error: invalid memory address or nil pointer dereference
Copier après la connexion

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>
Copier après la connexion

Output

&{0x10328100 {4}}
&{342} 342
{4} 4
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal