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.

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 das Definieren von Methoden für Structs, indem Sie ein einfaches Buchverwaltungssystem erstellen. Sie erstellen ein Book-Struct und definieren Methoden, die es dem Buch ermöglichen, seine Informationen anzuzeigen.

Wichtiger Hinweis: Da Buchtitel und Autorennamen Leerzeichen enthalten können, müssen Sie bufio.Scanner verwenden, um ganze Eingabezeilen zu lesen. Die Funktion fmt.Scanln stoppt das Lesen beim ersten Leerzeichen, was mehrwortige Titel und Autorennamen unterbrechen würde. Verwenden Sie bufio.NewScanner(os.Stdin) und rufen Sie scanner.Scan() gefolgt von scanner.Text() auf, um vollständige Zeilen zu lesen.

Sie erhalten drei Eingaben:

  • Einen String, der den Buchtitel repräsentiert (z. B. "The Go Programming Language")
  • Einen String, der den Autorennamen repräsentiert (z. B. "Alan Donovan")
  • Einen String, der die Anzahl der Seiten repräsentiert (z. B. "380")

Ihre Aufgabe ist es:

  1. Definieren Sie ein Book-Struct mit drei Feldern: Title (string), Author (string) und Pages (int)
  2. Erstellen Sie eine Methode namens displayInfo mit einem Value-Receiver, die die Buchinformationen im Format "Title: [title], Author: [author], Pages: [pages]" ausgibt
  3. Erstellen Sie eine Methode namens getDescription mit einem Value-Receiver, die einen String im Format "[title] by [author]" zurückgibt
  4. Verwenden Sie bufio.Scanner, um die Eingabezeilen korrekt zu lesen:
    • Erstellen Sie einen Scanner: scanner := bufio.NewScanner(os.Stdin)
    • Für jede Eingabezeile: rufen Sie scanner.Scan() und dann scanner.Text() auf
    • Dies stellt sicher, dass Titel und Autorennamen mit Leerzeichen korrekt gelesen werden
  5. Verarbeiten Sie die Eingaben, um eine Book-Instanz zu erstellen
  6. Rufen Sie die Methode displayInfo auf, um die Buchinformationen auszugeben
  7. Rufen Sie die Methode getDescription auf und geben Sie die zurückgegebene Beschreibung aus

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

Spickzettel

Methoden in Go sind Funktionen, die zu einem bestimmten Typ gehören. Sie werden mit einem Receiver zwischen dem func-Schlüsselwort und dem Methodennamen definiert:

type Person struct {
    Name string
    Age  int
}

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

Der Receiver (p Person) macht greet zu einer Methode des Typs Person. Die Variable p repräsentiert die Instanz, auf der die Methode aufgerufen wird.

Methoden werden unter Verwendung der Punktnotation auf Struct-Instanzen aufgerufen, was es Structs ermöglicht, Aktionen im Zusammenhang mit ihren Daten auszuführen.

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