Maison > développement back-end > Golang > Comment fournir une valeur à un littéral de structure embarquée importé ?

Comment fournir une valeur à un littéral de structure embarquée importé ?

WBOY
Libérer: 2024-02-05 21:54:11
avant
1151 Les gens l'ont consulté

Comment fournir une valeur à un littéral de structure embarquée importé ?

Contenu des questions

Je suis un débutant ici :) Je ne comprends pas

Quand je fais cela dans un fichier :

scratch.go

package main

import "fmt"

type foo struct {
    field1 string
    field2 string
}

type bar struct {
    foo
    field3 string
    field4 string
}

func main() {
    foobar := bar{
        foo{
            "apples",
            "banana",
        },
        "spam",
        "eggs",
    }
    fmt.printf("%#v\n", foobar)

}
Copier après la connexion

Ça marche Mais quand j'ai 3 fichiers comme ça

rootproject
├── magazine
│   ├── address.go
│   └── employee.go
└── main.go
Copier après la connexion

magazine/address.go

package magazine

type address struct {
    street     string
    city       string
    state      string
    postalcode string
}
Copier après la connexion

magazine/employee.go

package magazine

type employee struct {
    name   string
    salary float64
    address
}
Copier après la connexion

et main.go

package main

import (
    "fmt"
    "magazine"
)

func main() {
    employee := magazine.employee{
        name:   "pogi",
        salary: 69420,
        magazine.address{
            street:     "23 pukinginamo st.",
            city:       "bactol city",
            state:      "betlog",
            postalcode: "23432",
        },
    }

    fmt.printf("%#v\n", employee)

}
Copier après la connexion

Erreur :(

mixture of field:value and value elements in struct literal
Copier après la connexion

Je ne comprends pas, qu’ai-je fait de mal ? Je pense que si la structure est imbriquée, on dit qu'elle est intégrée dans la structure externe et je peux accéder aux champs de la structure interne depuis la structure externe. C'est le cas de mon premier exemple (fichier unique), mais lorsque je le fais dans un package. Y a-t-il une différence ?


Bonne réponse


Je pense que si la structure est imbriquée, on dit qu'elle est incrustée dans la structure externe et je peux accéder aux champs de la structure interne depuis la structure externe.

Oui, vous pouvez accéder directement aux membres des champs intégrés, mais c'est en utilisant des littéraux composés. Si vous regardez les règles de structuration du texte, vous trouverez ce qui suit :

Si un élément a une clé, alors chaque élément doit avoir une clé.

Cette règle s'applique que le champ soit intégré ou non.

Pour corriger l'erreur, vous pouvez supprimer d'autres clés :

func main() {
    employee := magazine.employee{
        "pogi",
        69420,
        magazine.address{
            street:     "23 pukinginamo st.",
            city:       "bactol city",
            state:      "betlog",
            postalcode: "23432",
        },
    }
    fmt.printf("%#v\n", employee)
}
Copier après la connexion

Ou vous pouvez spécifier toutes les clés :

func main() {
    employee := magazine.Employee{
        Name:   "pogi",
        Salary: 69420,
        Address: magazine.Address{
            Street:     "23 pukinginamo st.",
            City:       "bactol city",
            State:      "betlog",
            PostalCode: "23432",
        },
    }
    fmt.Printf("%#v\n", employee)
}
Copier après la connexion

Notez que pour les champs incorporés, vous pouvez référencer le champ incorporé en utilisant le nom non qualifié du type.

https://www.php.cn/link/2eeb0ca3f02a275d5179f3b6d9e86e7d

Les champs déclarés avec un type mais sans nom de champ explicite sont appelés champs intégrés. Les champs intégrés doivent être spécifiés sous forme de noms de types t 或指向非接口类型名称 *t 的指针,并且 t qui ne peuvent pas eux-mêmes être des types de pointeurs. Les noms de types non qualifiés font office de noms de champs.

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal