Section 1 : Les pointeurs
En Go, un pointeur est une variable qui stocke l'adresse mémoire d'une autre variable. Les pointeurs sont une partie très fondamentale de Go et sont extrêmement utiles car ils permettent aux fonctions de modifier les données qui leur sont passées, parce qu'ils ont accès à la même adresse mémoire où réside la variable originale.
Pour créer un pointeur, nous utilisons l'opérateur & avant une variable. Cela renvoie l'adresse mémoire de cette variable. Par exemple :
Dans ce cas, ptr est un pointeur vers x, car il contient l'adresse mémoire de x.
Le type de ptr dans le cas ci-dessus est *int, car c'est un pointeur vers un entier. Le symbole * avant un type est utilisé pour désigner un pointeur vers ce type.
Pour obtenir la valeur stockée à l'adresse mémoire indiquée, ou pour "déréférencer" le pointeur, vous pouvez utiliser l'opérateur * avant le pointeur, comme *ptr. Par exemple :

Vous pouvez également utiliser des pointeurs pour changer la valeur stockée à une certaine adresse mémoire :
Dans ce cas, en modifiant *ptr, nous changeons en fait la valeur de x puisque ptr contient l'adresse de x.

On peut également imprimer la valeur contenue dans la variable ptr. Puisque c'est un pointeur, nous obtiendrons une adresse mémoire, qui dans ce cas-ci est l'adresse (ou l'emplacement mémoire) où est située la variable x.
La valeur imprimée ne sera pas toujours la même. Ça dépendra de l'endroit exact où la variable a été allouée lors de l'exécution du programme, qui varie selon différents facteurs, qui dépendent en partie du système d'exploitation. Nous reviendrons sur les modèles d'allocation de mémoire un peu plus loin.
Faites attention, la valeur zéro d'une variable non initialisée de type pointeur est nil, et si vous essayez de déréférencer le pointeur, Go interrompra l'exécution avec une panique au moment de l'exécution. Assurez-vous toujours que vos pointeurs sont initialisés avant utilisation.