Maison > Article > développement back-end > Structures anonymes dans Go : quand utiliser `struct{}{} contre {}` ?
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>
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>
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!