Parenthèses ou accolades : initialisation des structures Go
Dans Go, les structures peuvent être initialisées à l'aide des deux accolades (par exemple, item1 := Item{ 1, "Foo"}) et des parenthèses (par exemple, item2 := (Item{2, "Bar"})). Malgré leurs différences syntaxiques, les deux approches produisent des résultats identiques et renvoient le même nom de structure.
Quand les parenthèses sont essentielles
Bien que les parenthèses ne soient pas nécessaires pour la plupart des initialisations structurelles, elles devient crucial lorsque la structure est utilisée dans le cadre d’une expression conditionnelle. Sans parenthèses, une ambiguïté apparaît lors de l'analyse, entraînant des erreurs du compilateur. Par exemple :
<code class="go">if i := Item{3, "a"}; i.Id == 3 { }</code>
Résolution d'ambiguïté
L'erreur provient de l'incertitude quant à savoir si l'accolade ouvrante appartient au littéral composite ou au corps de l'instruction if. En plaçant l'initialisation structurelle entre parenthèses, le compilateur peut interpréter sans ambiguïté l'expression comme un littéral composite.
<code class="go">if i := (Item{3, "a"}); i.Id == 3 { }</code>
Parenthèses dans les itératifs
En plus des conditions, des parenthèses sont également requis lors de l'initialisation d'une structure dans un itérateur de boucle :
<code class="go">for i := (Item{3, "a"}); i.Id < 10; i = (Item{i.Id + 1, "b"}) { }</code>
Conclusion
Lors de l'initialisation des structures Go avec ou sans parenthèses, vous obtenez la même représentation structurelle, en utilisant des parenthèses est nécessaire dans des scénarios spécifiques :
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!