Maison >développement back-end >Golang >Comment initialiser un champ Struct intégré à l'aide d'une instance existante dans Go ?

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

DDD
DDDoriginal
2024-11-12 06:03:02971parcourir

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"?
}

Solution

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

Option 1 :

req := new(MyRequest)
req.PathParams = pathParams
req.Request = *origRequest

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,
}

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!

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