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
Mary-Kate Olsenoriginal
2024-10-28 21:55:02425parcourir

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>

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!

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