Allez les pointeurs en un mot

Les pointeurs ne sont pas uniques à Go, mais Go a une saveur unique de pointeurs, il est donc bon de savoir pourquoi ils sont uniques, car vous utiliserez des pointeurs dans chaque programme Go.

Pourquoi des pointeurs?

Tout dans Go est passé par valeur, comme dansCet dans toutes les langues descendant de C.

Si vous passez un Int à une fonction, la variable est copiée.

Si vous passez un pointeur, le pointeur est copié, maisne pasla valeur vers laquelle il pointe.

Ainsi, dans la plupart des cas, les pointeurs sont utilisés pour appeler des fonctions et passer des paramètres par référence.

Un exemple

Prenons une variable simplex, défini comme un entier avec une valeur5:

x := 5

Maintenant, l'adresse mémoire dexpeut être obtenu avec&x

Si vous imprimez&xavecfmt.Println, tu verras que c'est quelque chose comme0xc42000e248: une adresse mémoire.

Maintenant, nous pouvons affecter cette valeur à une variable, et cette variable sera un pointeur versx.

y := &x

Si nous écrivons cette déclaration de mission

*y = 10

lexla valeur sera maintenant10.

Pas d'arithmétique de pointeur

Les pointeurs Go sont similaires aux pointeurs C et C ++, mais ils sont plus sûrs, car vous ne pouvez pas effectuer d'opérations telles que

var x *int;
x++;

sur un pointeur, car l'adresse d'un pointeur ne peut pas être modifiée. Pas de dualité pointeur / tableau.

Retour des pointeurs des variables de fonction locales

Les variables de fonction locales référencées par des pointeurs renvoyés resteront disponibles tant que le pointeur sera disponible. Cela garantira que le pointeur pointe toujours vers ce que vous pensez.

Nil pointeurs

La valeur zéro d'un pointeur estnil. Cela signifie qu'un pointeur nul est toujours possible, mais cela pose moins de problèmes que dans d'autres langages (C, Java, C ++) car il y a moins de types masqués comme pointeurs et moins d'autres nils qui traînent. Par exemple, les chaînes en C sont des pointeurs. Dans Go, ils sont un type.

niln'est pas un retour courant pour les fonctions, comme dans les langages à valeur de retour unique - la vérification des erreurs est plus organisée, etniln'est pas une valeur nulle commune. De nombreux types de données intégrés (chaînes, tableaux, cartes, tranches ..) ont des valeurs nulles différentes denil.

Les références


Plus de tutoriels go: