Menu
Coddy logo textTech

Receveurs par valeur

Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 7 sur 68.

Lorsque vous définissez une méthode avec un récepteur de valeur (value receiver), la méthode opère sur une copie de l'instance de la struct plutôt que sur l'original. Cela signifie que toute modification apportée au récepteur à l'intérieur de la méthode n'affectera pas la variable struct d'origine.

type Counter struct {
    Value int
}

func (c Counter) increment() {
    c.Value++  // Ceci modifie la copie, pas l'original
}

Dans cet exemple, la méthode increment a un récepteur de valeur (c Counter). Lorsque vous appelez cette méthode sur une instance de Counter, Go crée une copie de la structure et la transmet à la méthode. Toute modification de c.Value à l'intérieur de la méthode n'affecte que cette copie.

Les récepteurs de valeur sont utiles lorsque votre méthode a seulement besoin de lire des données de la struct sans les modifier. Ils sont sûrs à utiliser car ils garantissent que les données originales restent inchangées, ce qui rend votre code plus prévisible et évite les effets secondaires indésirables.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Dans ce défi, vous allez vous entraîner à travailler avec des récepteurs de valeur (value receivers) en créant un système simple de surveillance de la température. Vous allez créer une structure Sensor et définir des méthodes qui démontrent comment les récepteurs de valeur fonctionnent avec des copies de la structure.

Vous recevrez trois entrées :

  • Une chaîne de caractères représentant l'ID du capteur (par exemple, "TEMP001")
  • Une chaîne de caractères représentant le relevé de température actuel (par exemple, "23.5")
  • Une chaîne de caractères représentant une valeur d'ajustement de la température (par exemple, "2.0")

Votre tâche consiste à :

  1. Définir une structure Sensor avec deux champs : ID (string) et Temperature (float64)
  2. Créer une méthode appelée displayReading avec un récepteur de valeur qui affiche les informations du capteur au format : "Sensor [ID]: [temperature]°C"
  3. Créer une méthode appelée adjustTemperature avec un récepteur de valeur qui ajoute la valeur d'ajustement à la température et affiche : "Adjusted reading: [new_temperature]°C"
  4. Analyser les entrées pour créer une instance de Sensor
  5. Appeler la méthode displayReading pour afficher la température d'origine
  6. Appeler la méthode adjustTemperature avec la valeur d'ajustement
  7. Appeler à nouveau la méthode displayReading pour démontrer que la structure d'origine reste inchangée

Ce défi démontrera que les méthodes avec des récepteurs de valeur travaillent sur des copies de la structure, de sorte que la valeur de température de la structure d'origine restera inchangée même après l'appel de la méthode adjustTemperature. Les valeurs de température doivent être affichées avec une précision d'une décimale.

Aide-mémoire

Les récepteurs de valeur opèrent sur une copie de l'instance de la structure, et non sur l'original. Les modifications apportées à l'intérieur de la méthode n'affectent pas la structure originale.

type Counter struct {
    Value int
}

func (c Counter) increment() {
    c.Value++  // Cela modifie la copie, pas l'original
}

Les récepteurs de valeur sont utiles lorsque les méthodes ont seulement besoin de lire des données sans modifier la structure originale, ce qui rend le code plus prévisible et évite les effets secondaires indésirables.

Essayez vous-même

package main

import (
    "fmt"
    "strconv"
)

// TODO: Définissez votre structure Sensor ici

// TODO: Définissez votre méthode displayReading avec un récepteur de valeur ici

// TODO: Définissez votre méthode adjustTemperature avec un récepteur de valeur ici

func main() {
    // Lire les entrées
    var sensorID string
    var tempStr string
    var adjustStr string
    
    fmt.Scanln(&sensorID)
    fmt.Scanln(&tempStr)
    fmt.Scanln(&adjustStr)
    
    // Analyser les valeurs de température et d'ajustement
    temperature, _ := strconv.ParseFloat(tempStr, 64)
    adjustment, _ := strconv.ParseFloat(adjustStr, 64)
    
    // TODO: Créer une instance de Sensor et appeler les méthodes requises
    
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux