Maison > développement back-end > Golang > Structures anonymes dans Go : quand utiliser `struct{}{} contre {}` ?

Structures anonymes dans Go : quand utiliser `struct{}{} contre {}` ?

Linda Hamilton
Libérer: 2024-11-02 07:01:02
original
402 Les gens l'ont consulté

 Anonymous Structs in Go: When to Use `struct{}{} vs. {}`?

Comprendre la différence entre struct{}{} et {} dans les structures anonymes

Dans Go, les cartes peuvent associer des chaînes à des structures anonymes personnalisées. La déclaration d'une telle carte peut déclencher un avertissement "Déclaration de type redondant" dans les IDE comme Gogland. Cela soulève la question de la différence entre les déclarations struct{}{} et {}.

Explication de la syntaxe

La syntaxe struct{}{} représente un littéral composite qui inclut à la fois le type (struct{}) et la valeur ({}). D'un autre côté, {} est également un littéral composite, mais il omet le type.

Implications du compilateur

En général, les littéraux composites nécessitent que le type soit spécifié . Cependant, lors de la déclaration des mappages, les types de clé et de valeur sont déduits du type de mappage. Par conséquent, vous pouvez omettre le type lors de l'attribution de valeurs littérales composites si elles correspondent à ces types déduits.

Cette exception a été introduite dans Go 1.5, conformément à la spécification pour les littéraux composites. Cela élimine le besoin de spécifier explicitement le type dans certaines situations, simplifiant ainsi le code.

Pour illustrer, considérons l'affectation de structure anonyme suivante :

<code class="go">var Foo = map[string]struct{}{
    "foo": struct{}{},
}</code>
Copier après la connexion

Gogland peut avertir de la déclaration de type redondante. Vous pouvez le résoudre en utilisant la syntaxe suivante :

<code class="go">var Foo = map[string]struct{}{
    "foo": {},
}</code>
Copier après la connexion

Cette syntaxe omet le type struct{} puisque le type est déduit de la valeur attribuée.

En résumé, la différence entre struct{}{} et {} est que le premier inclut explicitement le type dans le littéral composite, tandis que le second l'omet, en s'appuyant sur l'inférence de type de la déclaration de carte englobante.

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