Programmation en Go/Pointeurs et structures
Pointeurs
[modifier | modifier le wikicode]Les pointeurs sont un type important en Go. Nous les avons à peine évoqués dans un autre chapitre. Un pointeur est un peu comme l'adresse pointant sur une valeur, on peut retrouver cette valeur et la modifier à l'aide d'un pointeur.
Un pointeur est déclaré en faisant précéder le type de donnée pointée par une étoile (*int est un pointeur sur un entier). On prend l'adresse pointant sur une donnée en la faisant précéder de &:
var i = 5
var j *int = &i // pointeur sur i
Ensuite on peut récupérer la valeur sur laquelle on pointe en précédant le pointeur par une étoile:
var k = *j // k vaut 5
On peut modifier la valeur pointée avec *p=v:
*j = 6
Mais, maintenant, i vaut également 6, car j correspond à l'adresse de i! On peut également utiliser += pour ajouter une valeur:
*j+=10
k=*j // k vaut également 16 maintenant
Le pointeur 'nil'
[modifier | modifier le wikicode]Le mot-clé nil représente un pointeur qui ne pointe sur aucune valeur licite. Cela peut représenter la valeur initiale d'un pointeur qui ne pointe vers 'rien'.
Les types structurés
[modifier | modifier le wikicode]On peut déclarer un alias vers un type en Go en utilisant le mot-clé type suivi du type défini, par exemple:
type Vecteur3D [3]float32
var vec Vecteur3D
On peut déclarer un type structuré ou structure, en utilisant le mot-clé struct:
type Intervalle struct {
debut int
fin int
}
On peut déclarer une valeur littérale de structure comme ceci:
intervalle := Intervalle{0,3}
inter2 := Intervalle{fin:5}
Mais en général on utilise un pointeur sur une structure, pour ne pas la passer par valeur mais par référence:
inter := new(Intervalle)
inter2 := &Intervalle{0,5}
On accède ensuite à chaque champ d'une structure ou de son pointeur en faisant suivre la valeur d'un point suivi du nom du champ:
inter.fin += inter.debut