Maison > développement back-end > Golang > Comment Go gère-t-il l'initialisation d'une tranche de pointeurs avec des structures anonymes ?

Comment Go gère-t-il l'initialisation d'une tranche de pointeurs avec des structures anonymes ?

Barbara Streisand
Libérer: 2024-10-31 15:39:13
original
460 Les gens l'ont consulté

How does Go handle the initialization of a slice of pointers with anonymous structs?

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>
Copier après la connexion

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>
Copier après la connexion

Cela équivaut à ce qui suit :

<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>
Copier après la connexion

Dans le cas des pointeurs, cela devient :

<code class="go">f := []*<type>{{...}, {...}}</code>
Copier après la connexion

Ce qui équivaut à :

<code class="go">f := []*<type>{&amp;<type>{...}, &amp;<type>{...}}</code>
Copier après la connexion

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{&amp;Ex{1, 2}, &amp;Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}</code>
Copier après la connexion

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}, &amp;Ex{3, 4}} // Syntax Error!</code>
Copier après la connexion

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!

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