Initialisation d'une tranche de pointeurs avec des structures anonymes dans Go
Au chapitre 7.6 du texte "Go Programming Language", l'initialisation d'une tranche des pointeurs de piste utilisant des structures anonymes (structures sans définitions de type explicites) peuvent prêter à confusion. L'exemple suivant illustre cela :
<code class="go">var tracks = []*Track{ {"Go", "Delilah", "From the Roots Up", 2012, length("3m38s")}, {"Go", "Moby", "Moby", 1992, length("3m37s")}, {"Go Ahead", "Alicia Keys", "As I Am", 2007, length("4m36s")}, {"Ready 2 Go", "Martin Solveig", "Smash", 2011, length("4m24s")}, }</code>
La syntaxe d'initialisation d'une tranche de pointeurs ressemble à l'initialisation d'une tranche de structures, avec l'ajout de * avant le type d'élément. Cependant, sous le capot, la syntaxe est en fait un raccourci pour initialiser une tranche de valeurs avec un type spécifié au moment de la compilation.
<code class="go">f := []<type>{{...}, {...}}</code>
Cela équivaut à ce qui suit :
<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>
Dans le cas des pointeurs, cela devient :
<code class="go">f := []*<type>{{...}, {...}}</code>
Ce qui équivaut à :
<code class="go">f := []*<type>{&<type>{...}, &<type>{...}}</code>
Cela signifie que la syntaxe de structure anonyme est pratique pour initialiser des tranches de pointeurs.
Cependant, notez que lors de l'initialisation d'une tranche de pointeurs, les valeurs peuvent être d'un type struct anonyme, tant que le type reste cohérent au sein de la tranche.
<code class="go">a := []Ex{Ex{1, 2}, Ex{3, 4}} b := []Ex{{1, 2}, {3, 4}} c := []*Ex{&Ex{1, 2}, &Ex{3, 4}} d := []*Ex{{1, 2}, {3, 4}}</code>
Mélange et correspondance anonyme les structures avec des structures régulières ne sont pas autorisées, comme dans cet exemple :
<code class="go">e := []*Ex{{1, 2}, &Ex{3, 4}} // Syntax Error!</code>
Cela se produit car le compilateur ne peut pas déduire le type de la structure anonyme à partir d'un pointeur vers une structure.
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!