Menu
Coddy logo textTech

Value Receiver

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 7 von 68.

Wenn Sie eine Methode mit einem Value-Receiver definieren, operiert die Methode auf einer Kopie der Struct-Instanz anstatt auf dem Original. Dies bedeutet, dass alle Änderungen, die innerhalb der Methode am Receiver vorgenommen werden, die ursprüngliche Struct-Variable nicht beeinflussen.

type Counter struct {
    Value int
}

func (c Counter) increment() {
    c.Value++  // Dies verändert die Kopie, nicht das Original
}

In diesem Beispiel hat die increment-Methode einen Value-Receiver (c Counter). Wenn Sie diese Methode auf einer Counter-Instanz aufrufen, erstellt Go eine Kopie des Structs und übergibt diese an die Methode. Jegliche Änderungen an c.Value innerhalb der Methode wirken sich nur auf diese Kopie aus.

Value-Receiver sind nützlich, wenn Ihre Methode nur Daten aus dem Struct lesen muss, ohne es zu modifizieren. Sie sind sicher in der Anwendung, da sie garantieren, dass die Originaldaten unverändert bleiben, was Ihren Code vorhersehbarer macht und unbeabsichtigte Seiteneffekte verhindert.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung üben Sie die Arbeit mit Value Receivern, indem Sie ein einfaches Temperaturüberwachungssystem erstellen. Sie erstellen ein Sensor-Struct und definieren Methoden, die demonstrieren, wie Value Receiver mit Kopien des Structs arbeiten.

Sie erhalten drei Eingaben:

  • Ein String, der die Sensor-ID darstellt (z. B. "TEMP001")
  • Ein String, der den aktuellen Temperaturmesswert darstellt (z. B. "23.5")
  • Ein String, der einen Temperaturanpassungswert darstellt (z. B. "2.0")

Ihre Aufgabe ist es:

  1. Definieren Sie ein Sensor-Struct mit zwei Feldern: ID (string) und Temperature (float64)
  2. Erstellen Sie eine Methode namens displayReading mit einem Value Receiver, die die Sensorinformationen im Format "Sensor [ID]: [temperature]°C" ausgibt
  3. Erstellen Sie eine Methode namens adjustTemperature mit einem Value Receiver, die den Anpassungswert zur Temperatur addiert und "Adjusted reading: [new_temperature]°C" ausgibt
  4. Parsen Sie die Eingaben, um eine Sensor-Instanz zu erstellen
  5. Rufen Sie die Methode displayReading auf, um die ursprüngliche Temperatur anzuzeigen
  6. Rufen Sie die Methode adjustTemperature mit dem Anpassungswert auf
  7. Rufen Sie die Methode displayReading erneut auf, um zu demonstrieren, dass das ursprüngliche Struct unverändert bleibt

Diese Herausforderung wird zeigen, dass Methoden mit Value Receivern auf Kopien des Structs arbeiten, sodass der Temperaturwert des ursprünglichen Structs auch nach dem Aufruf der Methode adjustTemperature unverändert bleibt. Die Temperaturwerte sollten mit einer Nachkommastelle Genauigkeit angezeigt werden.

Spickzettel

Value-Receiver arbeiten auf einer Kopie der Struct-Instanz, nicht auf dem Original. Änderungen, die innerhalb der Methode vorgenommen werden, wirken sich nicht auf das ursprüngliche Struct aus.

type Counter struct {
    Value int
}

func (c Counter) increment() {
    c.Value++  // Dies modifiziert die Kopie, nicht das Original
}

Value-Receiver sind nützlich, wenn Methoden Daten nur lesen müssen, ohne das ursprüngliche Struct zu verändern, was den Code vorhersehbarer macht und unbeabsichtigte Nebenwirkungen verhindert.

Probier es selbst

package main

import (
    "fmt"
    "strconv"
)

// TODO: Definiere hier dein Sensor-Struct

// TODO: Definiere hier deine displayReading-Methode mit Value-Receiver

// TODO: Definiere hier deine adjustTemperature-Methode mit Value-Receiver

func main() {
    // Eingaben lesen
    var sensorID string
    var tempStr string
    var adjustStr string
    
    fmt.Scanln(&sensorID)
    fmt.Scanln(&tempStr)
    fmt.Scanln(&adjustStr)
    
    // Temperatur- und Anpassungswerte parsen
    temperature, _ := strconv.ParseFloat(tempStr, 64)
    adjustment, _ := strconv.ParseFloat(adjustStr, 64)
    
    // TODO: Erstelle eine Sensor-Instanz und rufe die erforderlichen Methoden auf
    
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf