Methoden für Structs definieren
Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 7 von 107.
Methoden in Go sind Funktionen mit einem speziellen Receiver-Argument, das die Funktion mit einem struct-Typ verknüpft.
Methodensyntax
func (receiverName StructType) MethodName() ReturnType {
// Methodenrumpf
}Definiere ein Struct mit Methoden
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func (r Rectangle) Perimeter() float64 {
return 2 * (r.Width + r.Height)
}Methoden mit Parametern
func (r Rectangle) Scale(factor float64) float64 {
return r.Area() * factor
}Methoden aufrufen
rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area()) // Ausgabe: 15
fmt.Println(rect.Perimeter()) // Ausgabe: 16
fmt.Println(rect.Scale(2)) // Ausgabe: 30Der Receiver (r Rectangle) ermöglicht es Ihnen, auf die Felder des Structs innerhalb der Methode über die Receiver-Variable r zuzugreifen. Methoden können andere Methoden desselben Structs aufrufen.
Aufgabe
MittelFüge dem Circle-Struct drei Methoden hinzu:
Area— gibtmath.Pi * radius * radiuszurückCircumference— gibt2 * math.Pi * radiuszurückDescribe— gibt einen String zurück:"Circle with radius X.XX"
Spickzettel
Methoden in Go sind Funktionen mit einem speziellen Receiver-Argument, das die Funktion mit einem Struct-Typ verknüpft.
Methoden-Syntax:
func (receiverName StructType) MethodName() ReturnType {
// Methodenkörper
}Beispiel mit einem Struct und Methoden:
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func (r Rectangle) Perimeter() float64 {
return 2 * (r.Width + r.Height)
}Methoden können Parameter akzeptieren:
func (r Rectangle) Scale(factor float64) float64 {
return r.Area() * factor
}Methoden aufrufen:
rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area()) // Ausgabe: 15
fmt.Println(rect.Perimeter()) // Ausgabe: 16
fmt.Println(rect.Scale(2)) // Ausgabe: 30Der Receiver ermöglicht es Ihnen, auf die Felder des Structs innerhalb der Methode zuzugreifen. Methoden können andere Methoden desselben Structs aufrufen.
Probier es selbst
package main
import "fmt"
func main() {
var radius float64
fmt.Scan(&radius)
c := Circle{Radius: radius}
fmt.Printf("Area: %.2f\n", c.Area())
fmt.Printf("Circumference: %.2f\n", c.Circumference())
fmt.Printf("Description: %s\n", c.Describe())
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der Go OOP
Externe DateienGo Workspace & ModulePackages & ImportsExportierte vs. nicht-exportierte NamenEinführung in OOP in GoStructs als KlassenMethoden für Structs definierenPointer- vs. Value-ReceiverStruct-InitialisierungKonstruktor-FunktionenZusammenfassung – Einfacher Taschenrechner4Interfaces
Einführung in InterfacesImplizite ImplementierungInterface als VertragLeeres Interface (any)Type AssertionType SwitchInterface-KompositionStringer & Error InterfacesRückblick - Formen-Rechner7Kapselung
Exportierte vs. nicht exportierte FelderKapselung auf Paket-EbeneGetter- & Setter-MethodenInformation Hiding in GoZusammenfassung - Studierendendatensätze10Generics (Go 1.18+)
Einführung in GenericsTypparameterType ConstraintsGenerische StructsWorkaround für generische MethodenZusammenfassung – Generische Collection2Vertiefung: Typen & Structs
Basis- & zusammengesetzte TypenBenutzerdefinierte TypdefinitionenStruct TagsAnonyme StructsVerschachtelte StructsZero Values & StandardwerteZusammenfassung - Kontaktbuch5Komposition statt Vererbung
Warum Go keine Vererbung hatGrundlagen des Struct EmbeddingMethod PromotionEinbetten mehrerer StructsEmbedding vs. AggregationShadowing eingebetteter MethodenZusammenfassung – Mitarbeiter-Hierarchie8Fehlerbehandlung & OOP
Das error-InterfaceEigene FehlertypenError Wrapping (fmt.Errorf)Sentinel-Fehlererrors.Is() und errors.As()Panic, Defer und RecoverZusammenfassung – Datei-Parser3Zeiger & Speicher
Zeiger-Grundlagen in GoZeiger auf StructsWertübergabe vs. ReferenzübergabeDie new() FunktionGarbage Collection in GoWiederholung – Linked List Builder6Polymorphismus in Go
Polymorphismus über InterfacesDuck Typing in GoInterface-ErfüllungsregelnPolymorphe CollectionsDependency InjectionZusammenfassung – Payment Processor9Nebenläufigkeit & OOP
Goroutines GrundlagenChannels & KommunikationGepufferte vs. ungepufferte ChannelsSelect-Anweisungsync.Mutex & sync.RWMutexsync.WaitGroupThread-sicheres Struct-DesignZusammenfassung - Worker Pool