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