Notes et transcriptions du cours “Démarrer avec Go” proposée par University of California, Irvine disponible sur la plateforme coursera.
La structure est un autre type de données agrégé, un autre type de données composite. En tant que type d'agrégat elle regroupe des types de données arbitraires en un seul objet, et elle est utile pour beaucoup de choses, généralement à des fins organisationnelles.
Donnons un exemple. Vous souhaitez créer une structure, (struct est l'abréviation de structure comme on le trouve dans le langage C). On souhaite créer une structure qui décrit une personne. Supposons que chaque personne possède certaines caractéristiques : comme un nom, une adresse et un numéro de téléphone. Pour toute personne, je veux représenter ces trois aspects.
Une option serait d'avoir trois variables distinctes. Pour chaque personne, on peut avoir trois variables distinctes et le programmeur doit se rappeler qu'elles sont liées. On pourrait utiliser les variables nom1
adresse1
et tel1
. Les variables sont différentes mais la nomenclature me permet, en tant que programmeur, de me souvenir : « OK, c'est le nom, l'adresse et le téléphone, ils doivent être apparentés, ils en ont tous un “1” en suffixe ». Pour la prochaine personne que je nommerai des variables,nom2
, adresse2
, tel2
etc.
C'est une façon de procéder. Dans ce scénario, ces trois informations (nom, adresse, téléphone) sont liées et c'est le programme lui-même qui doit se souvenir qu'elles sont liées. Que ce nom est lié à cette adresse et à ce téléphone, alors que cet autre nom est lié à cette autre adresse et à cet autre téléphone.
Une autre façon de faire (probablement meilleure) est de créer une structure dédiée qui représente une personne. Cette structure agrège les trois variables. Ainsi, cet objet contient désormais le nom, l' adresse et le numéro de téléphone d'une personne. Ces trois variables sont liées parce qu'elles se trouvent dans le même objet.
Ainsi, il est évident que lorsque vous accédez aux variables à partir du même objet, vous savez qu'elles sont liées à la même personne.
C'est donc à cela que sert une structure, pour rassembler différentes variables liées dans l'application et les assembler afin que vous, en tant que programmeur, sachiez qu'elles sont liées et qu'elles sont liées à la même personne ou à n'importe quel objet représenté dans votre application.
Ci-dessous un exemple de structure.
type struct Person { name string addr string phone string } var p1 Person
On définit un type, un type struct que nous appelons Person
. Cette structure Person
a 3 champs, trois informations : un nom (name), une adresse (address) et un numéro de téléphone (phone). Notez comment on définit ce type de structure. Avec son nom Person
, et entre accolades pour chacun de ses champs, le type correspondant (ici des chaînes de caractères).
Une fois que le type est définit, on peut déclarer autant de variables de type Person
que nécessaire. Ici p1 aura un champ name
, une champ address
et phone
à part entière. Ainsi, chaque propriété est appelée un champ, donc le nom est un champ, l'adresse est un champ, le téléphone est un champ, et p1
peut avoir des valeurs uniques pour chacun de ses champs par rapport à une autre variable p2
, qui est une autre variable de type Person
ou p3
. Je peux avoir n'importe quel nombre de personnes.
Si on veut accéder aux champs de la structure, pour lire ou modifier leur valeur, on utilise la notation par point. C'est différent des tableaux où l'on utilise les crochets et l'index.
p1.name = "Joe" x = p1.addr
Dans l'exemple ci-dessus on attribue la valeur “Joe” au champ “name” de p1
. On peut aussi lire de la même manière, la valeur du champ “addr” de p1 et l'affecter à la variable x
.
On utilise donc la notation par points plutôt que les crochets que vous utiliseriez avec les tableaux.
Vous pouvez initialiser vos structures à l'aide de la fonction new()
. Elle crée une structure vide et initialise tous les champs à des valeurs nulles.
p1 := new( Person )
Dans cet exemple, pour la structure de type Person
les champs sont tous de type chaînes de caractères. Leur valeur zéro sera une chaîne vide.
Une autre façon d'initialiser la structure est d'utiliser une définition littérale. Si vous voulez donner des valeurs à tous les champs lorsque vous créez la personne et que nous montrons
p1 := Person ( name: "Joe", addr: "2 rue des oiseaux", phone: "+335 78 25 36 41" )
Entre parenthèses on donne les valeurs associées à chaque champs séparés par des ,