Explorer la différence entre struct{}{} et {} dans Go
Les structures anonymes de Go offrent un moyen pratique de représenter des données simples structures sans définir de type nommé. Cependant, la syntaxe struct{}{} et {} pour créer de telles structures peut soulever des questions sur leur distinction.
Lors de la déclaration d'une carte de chaînes vers des structures anonymes dans Go, comme indiqué ci-dessous :
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
IntelliJ Idea peut générer un avertissement « Déclaration de type redondant ». Pour résoudre ce problème, le code suivant peut être utilisé :
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
La différence entre les deux syntaxes réside dans la façon dont le compilateur traite le littéral de structure anonyme incomplet. Dans la première syntaxe, struct{}{}, le type est explicitement spécifié même s'il est anonyme. Dans la deuxième syntaxe, {}, le type est complètement omis.
Selon la spécification du langage Go, dans un littéral composite d'un type de carte, si les types des clés et des valeurs sont connus à partir du type de carte eux-mêmes, ils peuvent être omis lorsqu'il est prévu de spécifier des valeurs de ces types. Cela explique pourquoi le compilateur n'exige pas la spécification de type pour {} dans ce contexte.
Il est important de noter que cette omission n'est valable qu'à partir de Go 1.5 en raison d'un oubli.
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!