Maison  >  Article  >  développement back-end  >  Comment initialiser des tranches de pointeurs avec des structures anonymes dans Golang ?

Comment initialiser des tranches de pointeurs avec des structures anonymes dans Golang ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 15:53:02931parcourir

How to Initialize Slices of Pointers with Anonymous Structs in Golang?

Initialisation de tranches de pointeurs avec des structures anonymes dans Golang

Dans l'extrait de code du chapitre 7 de GOPL (section 7.6), une structure anonyme est utilisé pour initialiser une tranche de pointeurs :

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

Cela peut sembler déroutant car le type Track est déjà défini et la syntaxe {1, 2} semble initialiser une nouvelle structure sans nom. Cependant, cette syntaxe est un raccourci utilisé pour initialiser l'élément de type slice sans définir explicitement la structure.

La notation "{}" est essentiellement équivalente à :

<code class="go">type Ex struct {
    A, B int
}

a := []Ex{Ex{1, 2}, Ex{3, 4}}</code>

Où le le nom du type (Ex) est omis. Cette syntaxe fonctionne même lors de l'initialisation de tranches de pointeurs :

<code class="go">c := []*Ex{&Ex{1, 2}, &Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}
e := []*Ex{{1, 2}, &Ex{3, 4}}</code>

Dans ces cas, l'opérateur & est automatiquement appliqué à la structure anonyme pour créer le pointeur.

Cependant, en tentant d'initialiser un une tranche de pointeurs avec une référence à une structure anonyme (sans l'opérateur &) entraînera une erreur de syntaxe :

<code class="go">f := []*Ex{&{1, 2}, &{3, 4}} // Syntax Error!</code>

Pour initialiser une tranche de pointeurs avec une structure anonyme, soit la structure anonyme doit être convertie vers un pointeur, ou le pointeur peut être complètement omis :

<code class="go">f := []struct{
    A, B int
}{
    {1, 2}, {3, 4}
}
// or with pointers...
g := []*struct{
    A, B int
}{
    {1, 2}, {3, 4}
}</code>

Ici, la structure anonyme est intégrée dans la tranche de pointeurs sans avoir besoin d'une définition de type distincte. Cette syntaxe est couramment utilisée pour initialiser des structures anonymes dans des cartes et autres collections dans Golang.

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