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.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachIn 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:
- Definieren Sie ein
Book-Struct mit drei Feldern:Title(string),Author(string) undPages(int) - Erstellen Sie eine Methode namens
displayInfomit einem Value-Receiver, die die Buchinformationen im Format"Title: [title], Author: [author], Pages: [pages]"ausgibt - Erstellen Sie eine Methode namens
getDescriptionmit einem Value-Receiver, die einen String im Format"[title] by [author]"zurückgibt - 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 dannscanner.Text()auf - Dies stellt sicher, dass Titel und Autorennamen mit Leerzeichen korrekt gelesen werden
- Erstellen Sie einen Scanner:
- Verarbeiten Sie die Eingaben, um eine
Book-Instanz zu erstellen - Rufen Sie die Methode
displayInfoauf, um die Buchinformationen auszugeben - Rufen Sie die Methode
getDescriptionauf 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
}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