Maison > développement back-end > Golang > le corps du texte

Comment initialiser un champ Struct intégré à l'aide d'une instance existante dans Go ?

DDD
Libérer: 2024-11-12 06:03:02
original
944 Les gens l'ont consulté

How Can You Initialize an Embedded Struct Field Using an Existing Instance in Go?

Problèmes rencontrés lors de l'initialisation de structures intégrées dans Go

Les structures intégrées offrent des avantages significatifs dans Go, mais elles peuvent parfois présenter des défis uniques, en particulier lors de l'initialisation. Considérons le scénario suivant, dans lequel une structure contenant une structure interne anonyme doit être initialisée à l'aide d'une instance existante de la structure interne.

type MyRequest struct {
    Request http.Request
    PathParams map[string]string
}
func New(origRequest *http.Request, pathParams map[string]string) *MyRequest {
    // How to initialize "Request" field with "origRequest"?
}
Copier après la connexion

Solution

Pour résoudre ce problème, il existe deux solutions viables. options :

Option 1 :

req := new(MyRequest)
req.PathParams = pathParams
req.Request = *origRequest
Copier après la connexion

Dans cette approche, une nouvelle instance de MyRequest est créé en utilisant new. Le champ PathParams est initialisé avec la carte pathParams fournie. La structure interne anonyme Request est initialisée en explicitement en lui attribuant la valeur déréférencée de origRequest.

Option 2 :

req := &MyRequest{
    PathParams: pathParams,
    Request: origRequest,
}
Copier après la connexion

Cette alternative Cette approche utilise une syntaxe littérale composite pour créer une nouvelle instance de MyRequest. Les champs PathParams et Request sont initialisés dans le littéral. Il est important de noter que le champ Request est initialisé sans besoin de déréférencement.

Comprendre le nommage des champs de structure incorporés

Lorsqu'une structure interne anonyme est intégrée dans une structure plus grande , les champs incorporés héritent du nom de la structure externe. Dans ce cas, PathParams et Request deviennent des champs de MyRequest. Pour plus d'informations, reportez-vous à la spécification Go sur [Struct Types](https://go.dev/ref/spec#Struct_types).

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