Maison > développement back-end > Golang > 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
Libérer: 2024-11-01 15:53:02
original
1007 Les gens l'ont consulté

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

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

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

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

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

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!

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