Menu
Coddy logo textTech

Pointer Receiver

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

Während Wert-Empfänger mit Kopien von Strukturen arbeiten, arbeiten Zeiger-Empfänger direkt mit der ursprünglichen Strukturinstanz. Wenn du eine Methode mit einem Zeiger-Empfänger definierst, kann die Methode die ursprünglichen Daten ändern, weil sie einen Zeiger auf die Struktur statt einer Kopie erhält.

Um einen Pointer-Receiver zu erstellen, fügen Sie ein Sternchen * vor dem Typnamen in der Receiver-Deklaration hinzu:

type Person struct {
    Name string
    Age  int
}

func (p *Person) haveBirthday() {
    p.Age++  // Dies modifiziert das ursprüngliche Struct
}

In diesem Beispiel ist (p *Person) ein Pointer-Receiver. Wenn du die Methode haveBirthday für eine Instanz von Person aufrufst, erhält die Methode einen Pointer auf die ursprüngliche Struktur. Alle Änderungen, die über diesen Pointer an den Feldern der Struktur vorgenommen werden, ändern die ursprünglichen Daten dauerhaft.

Pointer-Receiver sind unerlässlich, wenn Ihre Methoden die Felder des Structs aktualisieren müssen, was sie perfekt für Operationen macht, die den Zustand Ihrer Daten ändern.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung übst du, Methoden mit Pointer-Receivern zu erstellen, indem du ein einfaches Bankkontosystem entwickelst. Du erstellst eine Account-Struktur und definierst Methoden, die den Kontostand mithilfe von Pointer-Receivern ändern können.

Du erhältst drei Eingaben:

  • Eine Zeichenkette, die den Namen des Kontoinhabers darstellt (z. B. "John Smith")
  • Eine Zeichenkette, die den anfänglichen Kontostand darstellt (z. B. "1000.50")
  • Eine Zeichenkette, die einen Transaktionsbetrag darstellt (z. B. "250.75")

Deine Aufgabe ist es:

  1. Eine Account-Struktur mit zwei Feldern zu definieren: Name (string) und Balance (float64)
  2. Eine Methode namens deposit mit einem Pointer-Receiver zu erstellen, die den angegebenen Betrag zum Kontostand addiert
  3. Eine Methode namens withdraw mit einem Pointer-Receiver zu erstellen, die den angegebenen Betrag vom Kontostand subtrahiert
  4. Eine Methode namens displayBalance mit einem Value-Receiver zu erstellen, die die Kontoinformationen im Format "Account: [name], Balance: $[balance]" ausgibt
  5. Die Eingaben zu verarbeiten, um eine Account-Instanz zu erstellen
  6. displayBalance aufzurufen, um den anfänglichen Kontostand anzuzeigen
  7. deposit mit dem Transaktionsbetrag aufzurufen
  8. displayBalance aufzurufen, um den Kontostand nach der Einzahlung anzuzeigen
  9. withdraw mit dem Transaktionsbetrag aufzurufen
  10. displayBalance aufzurufen, um den endgültigen Kontostand anzuzeigen

Der Kontostand sollte mit einer Genauigkeit von zwei Dezimalstellen angezeigt werden. Diese Herausforderung zeigt, wie Pointer-Receiver es Methoden ermöglichen, die Daten der ursprünglichen Struktur zu ändern, während Value-Receiver mit Kopien arbeiten.

Probier es selbst

package main

import (
	"fmt"
	"strconv"
)

// TODO: Definiere hier das Account-Struct

// TODO: Definiere hier die deposit-Methode mit Pointer-Receiver

// TODO: Definiere hier die withdraw-Methode mit Pointer-Receiver

// TODO: Definiere hier die displayBalance-Methode mit Value-Receiver

func main() {
	// Eingabe lesen
	var name string
	var initialBalanceStr string
	var transactionAmountStr string
	
	fmt.Scanln(&name)
	fmt.Scanln(&initialBalanceStr)
	fmt.Scanln(&transactionAmountStr)
	
	// String-Eingaben in entsprechende Typen umwandeln
	initialBalance, _ := strconv.ParseFloat(initialBalanceStr, 64)
	transactionAmount, _ := strconv.ParseFloat(transactionAmountStr, 64)
	
	// TODO: Erstelle eine Account-Instanz
	
	// TODO: Zeige den Anfangskontostand an, führe eine Einzahlung durch, zeige den Kontostand an, führe eine Auszahlung durch, zeige den Endkontostand an
}
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