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.
Aufgabe
EinfachIn 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:
- Eine
Sensor-Struktur mit zwei Feldern zu definieren:ID(string) undTemperature(float64) - Eine Methode namens
displayReadingmit einem Wertempfänger zu erstellen, die die Sensorinformationen im folgenden Format ausgibt:"Sensor [ID]: [temperature]°C" - Eine Methode namens
adjustTemperaturemit einem Wertempfänger zu erstellen, die den Anpassungswert zur Temperatur addiert und Folgendes ausgibt:"Adjusted reading: [new_temperature]°C" - Die Eingaben zu verarbeiten, um eine
Sensor-Instanz zu erstellen - Die Methode
displayReadingaufzurufen, um die ursprüngliche Temperatur anzuzeigen - Die Methode
adjustTemperaturemit dem Anpassungswert aufzurufen - Die Methode
displayReadingerneut 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
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und VerhaltenÜbe selbstständig: Online-Go-Compiler