Einführung in OOP in Go
Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 5 von 107.
Go hat keine Klassen, aber es ermöglicht objektorientierte Programmierung durch structs und methods. Ein struct gruppiert zusammengehörige Daten, und methods definieren Verhalten, das an diesen struct gebunden ist.
Definieren Sie ein Struct zum Speichern von Daten
type Dog struct {
Name string
Age int
}Füge dem Struct eine Methode hinzu
func (d Dog) Bark() string {
return d.Name + " says Woof!"
}Erstellen Sie eine Instanz und verwenden Sie diese
package main
import "fmt"
type Dog struct {
Name string
Age int
}
func (d Dog) Bark() string {
return d.Name + " says Woof!"
}
func main() {
myDog := Dog{Name: "Buddy", Age: 3}
fmt.Println(myDog.Bark()) // Ausgabe: Buddy says Woof!
fmt.Println(myDog.Age) // Ausgabe: 3
}In Go wird der Teil (d Dog) vor dem Methodennamen als Receiver bezeichnet. Er verbindet die Methode mit dem Dog-Struct, ähnlich wie Methoden in anderen Sprachen zu Klassen gehören.
Aufgabe
EinfachErstellen Sie eine Cat-Struktur mit einer Methode, um den OOP-Ansatz von Go zu üben:
- Definieren Sie eine
Cat-Struktur mit den FeldernName(string) undAge(int) - Fügen Sie eine
Speak-Methode hinzu, die den Namen der Katze gefolgt von" says Meow!"zurückgibt
Spickzettel
Go realisiert objektorientierte Programmierung durch structs und Methoden. Ein struct gruppiert zusammengehörige Daten, und Methoden definieren das Verhalten, das mit diesem struct verknüpft ist.
Definieren Sie ein struct, um Daten zu speichern:
type Dog struct {
Name string
Age int
}Fügen Sie dem struct eine Methode mithilfe eines Receivers hinzu:
func (d Dog) Bark() string {
return d.Name + " says Woof!"
}Der Teil (d Dog) vor dem Methodennamen ist der Receiver, der die Methode mit dem struct verbindet.
Erstellen Sie eine Instanz und verwenden Sie diese:
myDog := Dog{Name: "Buddy", Age: 3}
fmt.Println(myDog.Bark()) // Ausgabe: Buddy says Woof!
fmt.Println(myDog.Age) // Ausgabe: 3Probier es selbst
package main
import "fmt"
func main() {
var name string
var age int
fmt.Scan(&name, &age)
cat := Cat{Name: name, Age: age}
fmt.Printf("Name: %s\n", cat.Name)
fmt.Printf("Age: %d\n", cat.Age)
fmt.Println(cat.Speak())
}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