Utiliser des pointeurs dans les fonctions
Fait partie de la section Fondamentaux du Journey GO de Coddy — leçon 64 sur 109.
Les fonctions peuvent accepter et modifier des variables via des pointeurs. Cela permet aux fonctions de modifier la valeur d'origine, et non seulement une copie.
Créez une fonction qui modifie une valeur via un pointeur :
func main() {
number := 10
fmt.Println("Before:", number)
// Passez l'adresse de number
doubleValue(&number)
fmt.Println("After:", number)
}
func doubleValue(num *int) {
// Modifiez la valeur à l'adresse du pointeur
*num = *num * 2
}La sortie affiche la valeur modifiée par la fonction :
Before: 10
After: 20Lorsque nous passons &number, la fonction reçoit un pointeur et peut modifier la variable d'origine.
Défi
DébutantDans ce défi, vous allez vous entraîner à utiliser des pointeurs dans des fonctions. Vous devez compléter une fonction qui prend un pointeur vers une chaîne de caractères et modifie la valeur de la chaîne pour qu'elle soit en majuscules.
La fonction makeUppercase est déjà définie pour vous. Votre tâche consiste à modifier la chaîne vers laquelle pointe le pointeur en utilisant la fonction strings.ToUpper().
Aide-mémoire
Les fonctions peuvent modifier des variables via des pointeurs en recevant l'adresse mémoire au lieu d'une copie :
func main() {
number := 10
// Passer l'adresse de number en utilisant &
doubleValue(&number)
fmt.Println(number) // Résultat : 20
}
func doubleValue(num *int) {
// Modifier la valeur à l'adresse du pointeur en utilisant *
*num = *num * 2
}Syntaxe clé des pointeurs :
&variable- obtient l'adresse d'une variable*pointer- déréférence un pointeur pour accéder à/modifier la valeur*type- déclare un type de paramètre de pointeur
Essayez vous-même
package main
import (
"fmt"
"strings"
)
// makeUppercase prend un pointeur vers une chaîne de caractères et transforme la chaîne en majuscules
func makeUppercase(strPtr *string) {
// TODO : Utilisez strings.ToUpper() pour modifier la chaîne vers laquelle pointe strPtr
// Astuce : Vous devez déréférencer le pointeur pour accéder à la valeur de la chaîne
? = strings.ToUpper(?)
}
func main() {
// Nous avons déjà une variable de type chaîne
message := "hello, world"
// Affiche le message original
fmt.Printf("Original message: %s\n", message)
// Appelle makeUppercase avec l'adresse de message
makeUppercase(&message)
// Affiche le message modifié
fmt.Printf("Modified message: %s\n", message)
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Opérateurs de comparaison et logiques
Opérateurs de comparaison - Partie 1Opérateurs de comparaison - Partie 2Opérateur logique ANDOpérateur logique OROpérateur logique NOTBases de la priorité des opérateursRécapitulatif - Effectuer des comparaisons7Structures de contrôle : Les boucles
Explication de la boucle `for`Boucle For - Les basesBoucle For - Condition uniquementLe mot-clé `break`Le mot-clé `continue`Boucles imbriquéesRécapitulatif - Répéter des actions2Variables et types de données de base
Qu'est-ce qu'une variableInférence de type avec `:=` Entiers (int)Nombres à virgule flottanteBooléensChaînes de caractères (Strings)Valeurs zéroConstantesConventions de nommageRécapitulatif - Variables et types5Entrées/Sorties de base
Sortie formatéeVerbes de formatageAffichage des typesSaisie utilisateur de baseRécapitulatif - Entrées et Sorties8Fonctions
Comprendre les fonctionsDéclarer une fonctionAppeler des fonctionsParamètres de fonctionRetourner une valeur uniqueRetourner plusieurs valeursValeurs de retour nomméesBases de la portée des fonctionsRécapitulatif - Créer du code réutilisable11Types composites : Slices
Introduction aux SlicesDéclaration de littéraux de SlicesCréation de Slices avec `make`Longueur vs Capacité des SlicesAccès aux éléments d'un SliceAjout d'élémentsDécoupage de Slices/Tableaux existantsItération sur les SlicesCopie de SlicesRécapitulatif - Listes dynamiques3Opérateurs de base
Opérateurs arithmétiquesOpérateur de divisionL'opérateur moduloOpérateur d'affectationOpérateurs d'affectation augmentéeIncrémentation et décrémentationRécapitulatif - Calculs6Structure de contrôle : Les conditionnelles
L'instruction `if`Le mot-clé `else`Le mot-clé `else if`Masquage de variable dans `if`Initialisation des variablesL'instruction `switch``switch` avec expressions`switch` sans expressionLe mot-clé `fallthrough`Récapitulatif - Prendre des décisions9Pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de variables pointeursL'opérateur d'adresseDéréférencement de pointeursUtiliser des pointeurs dans les fonctionsPointeurs NilRécapitulatif - Comprendre les pointeurs12Types composites : Maps
Introduction aux MapsDéclaration de littéraux de MapCréation de Maps avec `make`Ajout et mise à jour de paires clé-valeurAccès aux valeurs d'une MapVérification de l'existence d'une cléSuppression d'entrées de MapTaille d'une MapItération sur les MapsRécapitulatif - Stockage clé-valeur