Maison >développement back-end >Golang >Comment la syntaxe d'initialisation de Go pour les tranches et les cartes gère-t-elle les structures anonymes ?

Comment la syntaxe d'initialisation de Go pour les tranches et les cartes gère-t-elle les structures anonymes ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-01 02:34:40809parcourir

How does Go's initialization syntax for slices and maps handle anonymous structures?

Syntaxe d'initialisation de Golang pour les tranches et les cartes

Dans Go, déclarer et initialiser des tranches et des cartes peut impliquer des structures anonymes, un aspect qui peut provoquer confusion. Examinons les nuances de ces techniques d'initialisation.

Pour illustrer, considérons la ligne suivante du chapitre 7 de GOPL :

<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>

Ce code définit une tranche de pointeurs de piste. Lors de l'initialisation de la tranche, les éléments semblent être des structures anonymes sans déclarations de type explicites. Cependant, Go permet d'initialiser ces structures à l'aide d'un raccourci de syntaxe :

<code class="go">f := []<type>{{...}, {...}}</code>

Cette syntaxe est en fait équivalente à :

<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>

where peut représenter n’importe quel type, y compris les pointeurs. Ainsi, dans le cas de la tranche de pistes, l'initialisation suivante est valable :

<code class="go">f := []*Track{{...}, {...}}</code>

qui équivaut à :

<code class="go">f := []*Track{&Track{...}, &Track{...}}</code>

Cette syntaxe s'applique également aux cartes :

<code class="go">f := map[string]<type>{"a": {...}, "b": {...}} // equivalent to
f := map[string]<type>{"a": &<type>{...}, "b": &<type>{...}}</code>

Les structures anonymes, en revanche, font référence à des structures sans définition de type distincte. Les types anonymes se distinguent des structures anonymes, où seule la structure elle-même n'a pas de nom. Une véritable structure anonyme s'écrit comme suit :

<code class="go">f := []struct{
    A, B int
}{
    {1, 2}, {3, 4}
}</code>

Dans ce cas, la structure dans la liste n'a pas de définition de type et est référencée de manière anonyme. Le raccourci d'initialisation nous permet d'initialiser facilement cette structure sans type nommé.

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!

Déclaration:
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