Maison > développement back-end > Golang > Comment initialiser une tranche de pointeurs vers des structures en Go : une ventilation de la syntaxe des structures anonymes ?

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

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