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.
Aufgabe
EinfachIn 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:
- Definiere ein
Book-Struct mit drei Feldern:Title(string),Author(string) undPages(int) - Erstelle eine Methode namens
displayInfomit einem Value-Receiver, die die Buchinformationen im folgenden Format ausgibt:"Title: [title], Author: [author], Pages: [pages]" - Erstelle eine Methode namens
getDescriptionmit einem Value-Receiver, die eine Zeichenkette im folgenden Format zurückgibt:"[title] by [author]" - 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ßendscanner.Text()auf - Dadurch wird sichergestellt, dass Titel und Autorennamen mit Leerzeichen korrekt gelesen werden
- Erstelle einen Scanner:
- Verarbeite die Eingaben, um eine
Book-Instanz zu erstellen - Rufe die Methode
displayInfoauf, um die Buchinformationen auszugeben - Rufe die Methode
getDescriptionauf 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
}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