Menu
Coddy logo textTech

Methoden für Structs definieren

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

In Go ist eine Methode eine Funktion, die zu einem bestimmten Typ gehört. Im Gegensatz zu regulären Funktionen, die eigenständig sind, sind Methoden an Structs gebunden und ermöglichen es Ihnen, Verhalten für Ihre benutzerdefinierten Datentypen zu definieren.

Um eine Methode zu definieren, platzieren Sie einen Receiver zwischen dem func-Schlüsselwort und dem Methodennamen. Der Receiver gibt an, zu welchem Typ die Methode gehört.

type Person struct {
    Name string
    Age  int
}

func (p Person) greet() {
    fmt.Printf("Hello, my name is %s\n", p.Name)
}

In diesem Beispiel ist (p Person) der Receiver, was greet zu einer Methode des Typs Person macht. Die Variable p repräsentiert die Instanz von Person, auf der die Methode aufgerufen wird, ähnlich wie this in anderen Sprachen.

Sie können die Methode dann unter Verwendung der Punktnotation auf jeder Person-Instanz aufrufen, was Ihren Structs die Fähigkeit verleiht, Aktionen im Zusammenhang mit ihren Daten auszuführen.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung übst du das Definieren von Methoden für Structs, indem du ein einfaches Buchverwaltungssystem erstellst. Du erstellst ein Book-Struct und definierst Methoden, mit denen das Buch seine Informationen anzeigen kann.

Wichtiger Hinweis: Da Buchtitel und Autorennamen Leerzeichen enthalten können, musst du bufio.Scanner verwenden, um ganze Eingabezeilen zu lesen. Die Funktion fmt.Scanln beendet das Lesen am ersten Leerzeichen, wodurch mehrteilige Titel und Autorennamen nicht korrekt gelesen würden. Verwende bufio.NewScanner(os.Stdin) und rufe scanner.Scan() gefolgt von scanner.Text() auf, um vollständige Zeilen zu lesen.

Du erhältst drei Eingaben:

  • Eine Zeichenkette, die den Buchtitel darstellt (z. B. "The Go Programming Language")
  • Eine Zeichenkette, die den Namen des Autors darstellt (z. B. "Alan Donovan")
  • Eine Zeichenkette, die die Seitenzahl darstellt (z. B. "380")

Deine Aufgabe ist es, Folgendes zu tun:

  1. Definiere ein Book-Struct mit drei Feldern: Title (string), Author (string) und Pages (int)
  2. Erstelle eine Methode namens displayInfo mit einem Value-Receiver, die die Buchinformationen im folgenden Format ausgibt: "Title: [title], Author: [author], Pages: [pages]"
  3. Erstelle eine Methode namens getDescription mit einem Value-Receiver, die eine Zeichenkette im folgenden Format zurückgibt: "[title] by [author]"
  4. Verwende bufio.Scanner, um die Eingabezeilen korrekt zu lesen:
    • Erstelle einen Scanner: scanner := bufio.NewScanner(os.Stdin)
    • Rufe für jede Eingabezeile zunächst scanner.Scan() und anschließend scanner.Text() auf
    • Dadurch wird sichergestellt, dass Titel und Autorennamen mit Leerzeichen korrekt gelesen werden
  5. Verarbeite die Eingaben, um eine Book-Instanz zu erstellen
  6. Rufe die Methode displayInfo auf, um die Buchinformationen auszugeben
  7. Rufe die Methode getDescription auf und gib die zurückgegebene Beschreibung aus

Die Methoden sollten die Receiver-Variable verwenden, um auf die Struct-Felder zuzugreifen und die jeweiligen Operationen auszuführen. Denke daran, dass Methoden mit Value-Receivern mit einer Kopie der Struct-Instanz arbeiten.

Probier es selbst

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

// TODO: Definieren Sie hier Ihre Book-Struktur

// TODO: Definieren Sie hier Ihre displayInfo-Methode

// TODO: Definieren Sie hier Ihre getDescription-Methode

func main() {
    // Scanner zum Lesen von Eingabezeilen erstellen
    scanner := bufio.NewScanner(os.Stdin)
    
    // Titel lesen
    scanner.Scan()
    title := scanner.Text()
    
    // Autor lesen
    scanner.Scan()
    author := scanner.Text()
    
    // Seiten lesen
    scanner.Scan()
    pagesStr := scanner.Text()
    
    // Seiten-String in Ganzzahl umwandeln
    pages, _ := strconv.Atoi(pagesStr)
    
    // TODO: Erstellen Sie eine Book-Instanz und rufen Sie die 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