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 dex
peut être obtenu avec&x
Si vous imprimez&x
avecfmt.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
lex
la 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.
nil
n'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, etnil
n'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:
- Utilisation du proxy inverse NGINX pour servir les services Go
- Faire une copie d'une structure dans Go
- Les bases d'un serveur Web Go
- Trier un type de carte dans Go
- Allez les pointeurs en un mot
- Go Tags expliqué
- Aller au formatage de la date et de l'heure
- Traitement JSON avec Go
- Fonctions Go Variadic
- Fiche de triche Go Strings
- L'interface Go Empty expliquée
- Débogage Go avec VS Code et Delve
- Named Go renvoie des paramètres
- Générer des nombres et des chaînes aléatoires dans Go
- Structure du système de fichiers d'un projet Go
- Algorithme de recherche binaire implémenté dans Go
- Utilisation des indicateurs de ligne de commande dans Go
- GOPATH a expliqué
- Créez une application de ligne de commande avec Go: lolcat
- Création d'une commande CLI avec Go: cowsay
- Utilisation de Shell Pipes avec Go
- Tutoriel Go CLI: Clone de fortune
- Lister les fichiers dans un dossier avec Go
- Utilisez Go pour obtenir une liste des référentiels à partir de GitHub
- Allez, ajoutez une tranche de chaînes à un fichier
- Allez, convertissez une chaîne en une tranche d'octets
- Visualisez vos contributions Git locales avec Go
- Premiers pas avec Go CPU et profilage de la mémoire
- Résolution de l'erreur "ne prend pas en charge l'indexation" dans un programme Go
- Mesure du temps d'exécution dans un programme Go
- Création d'un robot d'exploration Web avec Go pour détecter les titres en double
- Go Best Practices: pointeur ou récepteurs de valeur?
- Go Best Practices: Devez-vous utiliser une méthode ou une fonction?
- Go Structures de données: définir
- Aide-mémoire Go Maps
- Générer des implémentations pour les types génériques dans Go
- Go Data Structures: Dictionnaire
- Structures de données Go: table de hachage
- Implémenter des écouteurs d'événements dans Passer par les canaux
- Go Structures de données: pile
- Go Structures de données: file d'attente
- Go Structures de données: arbre de recherche binaire
- Go Structures de données: graphique
- Structures de données Go: liste liée
- Le guide complet des structures de données Go
- Comparaison des valeurs Go
- Est-ce que Go est orienté objet?
- Travailler avec une base de données SQL dans Go
- Utilisation des variables d'environnement dans Go
- Tutoriel Go: API REST soutenue par PostgreSQL
- Activation de CORS sur un serveur Web Go
- Déployer une application Go dans un conteneur Docker
- Pourquoi Go est un langage puissant à apprendre en tant que développeur PHP
- Allez, supprimez le caractère de nouvelle ligne io.Reader.ReadString
- Allez, comment observer les changements et reconstruire votre programme
- Allez, comptez les mois depuis une date
- Accéder aux paramètres HTTP POST dans Go