Maison > développement back-end > Golang > le corps du texte

Comment initialiser une tranche de pointeurs vers des structures en Go : une ventilation de la syntaxe des structures anonymes ?

Patricia Arquette
Libérer: 2024-11-01 13:15:06
original
523 Les gens l'ont consulté

How to Initialize a Slice of Pointers to Structs in Go: A Breakdown of Anonymous Struct Syntax?

Initialisation d'une tranche de pointeurs : compréhension de la syntaxe des structures anonymes

Dans le chapitre 7 de GOPL, un exemple est donné pour initialiser une tranche de pointeurs vers des structures de suivi :

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")},
}
Copier après la connexion

Pour comprendre la syntaxe, examinons le code suivant dans lequel nous définissons une structure Ex personnalisée et initialisons ses tranches :

type Ex struct {
    A, B int
}

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

Dans les cas a et b, nous initialisons les tranches avec des instances de la structure Ex utilisant une syntaxe de raccourci :

f := []<type>{{...}, {...}}
Copier après la connexion

Cela équivaut à :

f := []<type>{<type>{...}, <type>{...}}
Copier après la connexion

Pour les cas c, d et e, la syntaxe nécessite un peu plus d'explications. L'initialisation :

f := []*<type>{{...}, {...}}
Copier après la connexion

Est analogue à :

f := []*<type>{&<type>{...}, &<type>{...}}
Copier après la connexion

En d'autres termes, les accolades qui suivent le type spécifient les valeurs d'une structure de ce type, et les esperluettes créent des pointeurs à ces structures.

Enfin, dans le code suivant, nous recevons une erreur de syntaxe :

f := []*Ex{&{1, 2}, &{3, 4}} // Syntax Error!
Copier après la connexion

C'est parce que les accolades doivent être suivies du nom d'un type, pas d'un structure anonyme. La syntaxe correcte serait :

f := []*Ex{&Ex{1, 2}, &Ex{3, 4}}
Copier après la connexion

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!