Menu
Coddy logo textTech

Value Receiver

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

Wenn du eine Methode mit einem Wertempfänger definierst, arbeitet die Methode mit einer Kopie der Strukturinstanz statt mit dem Original. Das bedeutet, dass Änderungen am Empfänger innerhalb der Methode die ursprüngliche Strukturvariable 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-Empfänger sind nützlich, wenn deine Methode Daten aus der Struktur nur lesen muss, ohne sie zu verändern. Sie können sicher verwendet werden, da sie garantieren, dass die ursprünglichen Daten unverändert bleiben. Dadurch wird dein Code vorhersehbarer und unbeabsichtigte Nebenwirkungen werden verhindert.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung übst du die Arbeit mit Wertempfängern, indem du ein einfaches Temperaturüberwachungssystem erstellst. Du erstellst eine Sensor-Struktur und definierst Methoden, die zeigen, wie Wertempfänger mit Kopien der Struktur arbeiten.

Du erhältst drei Eingaben:

  • Eine Zeichenfolge, die die Sensor-ID darstellt (z. B. "TEMP001")
  • Eine Zeichenfolge, die den aktuellen Temperaturwert darstellt (z. B. "23.5")
  • Eine Zeichenfolge, die einen Temperatur-Anpassungswert darstellt (z. B. "2.0")

Deine Aufgabe ist es:

  1. Eine Sensor-Struktur mit zwei Feldern zu definieren: ID (string) und Temperature (float64)
  2. Eine Methode namens displayReading mit einem Wertempfänger zu erstellen, die die Sensorinformationen im folgenden Format ausgibt: "Sensor [ID]: [temperature]°C"
  3. Eine Methode namens adjustTemperature mit einem Wertempfänger zu erstellen, die den Anpassungswert zur Temperatur addiert und Folgendes ausgibt: "Adjusted reading: [new_temperature]°C"
  4. Die Eingaben zu verarbeiten, um eine Sensor-Instanz zu erstellen
  5. Die Methode displayReading aufzurufen, um die ursprüngliche Temperatur anzuzeigen
  6. Die Methode adjustTemperature mit dem Anpassungswert aufzurufen
  7. Die Methode displayReading erneut aufzurufen, um zu zeigen, dass die ursprüngliche Struktur unverändert bleibt

Diese Herausforderung zeigt, dass Methoden mit Wertempfängern mit Kopien der Struktur arbeiten. Daher bleibt der Temperaturwert der ursprünglichen Struktur auch nach dem Aufruf der Methode adjustTemperature unverändert. Die Temperaturwerte sollen mit einer Genauigkeit von einer Dezimalstelle angezeigt werden.

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

Übe selbstständig: Online-Go-Compiler