Structs als Klassen
Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 6 von 107.
Structs in Go dienen demselben Zweck wie Klassen in anderen Sprachen. Sie bündeln zusammengehörige Daten in einem einzigen Typ.
Definieren Sie ein Struct mit mehreren Feldtypen
type Car struct {
Brand string
Model string
Year int
Price float64
}Erstellen Sie eine Instanz unter Verwendung von Feldnamen
car := Car{
Brand: "Toyota",
Model: "Camry",
Year: 2023,
Price: 28000.50,
}Felder aufrufen und ändern
fmt.Println(car.Brand) // Toyota
fmt.Println(car.Year) // 2023
car.Price = 27000.00 // Ein Feld ändern
fmt.Println(car.Price) // 27000Structs können andere Structs enthalten
type Engine struct {
Horsepower int
FuelType string
}
type Car struct {
Brand string
Model string
Engine Engine
}
car := Car{
Brand: "Ford",
Model: "Mustang",
Engine: Engine{Horsepower: 450, FuelType: "Gasoline"},
}
fmt.Println(car.Engine.Horsepower) // 450Structs gruppieren zusammengehörige Felder. Sie greifen mit dem Punkt-Operator auf Felder zu, und Sie können Structs in anderen Structs verschachteln, um komplexe Datenmodelle zu erstellen.
Aufgabe
MittelDefiniere eine Profile-Struktur mit den folgenden Feldern:
Name— stringEmail— stringAge— intRole— string
Spickzettel
Structs in Go bündeln zusammengehörige Daten in einem einzigen Typ, ähnlich wie Klassen in anderen Sprachen.
Definieren Sie ein Struct mit mehreren Feldtypen:
type Car struct {
Brand string
Model string
Year int
Price float64
}Erstellen Sie eine Instanz unter Verwendung von Feldnamen:
car := Car{
Brand: "Toyota",
Model: "Camry",
Year: 2023,
Price: 28000.50,
}Greifen Sie auf Felder zu und ändern Sie diese mit dem Punkt-Operator:
fmt.Println(car.Brand) // Toyota
car.Price = 27000.00 // Modify a fieldStructs können andere Structs enthalten (verschachtelte Structs):
type Engine struct {
Horsepower int
FuelType string
}
type Car struct {
Brand string
Model string
Engine Engine
}
car := Car{
Brand: "Ford",
Model: "Mustang",
Engine: Engine{Horsepower: 450, FuelType: "Gasoline"},
}
fmt.Println(car.Engine.Horsepower) // 450Probier es selbst
package main
import "fmt"
func main() {
var name, email, role string
var age int
fmt.Scan(&name, &email, &age, &role)
p := Profile{
Name: name,
Email: email,
Age: age,
Role: role,
}
fmt.Printf("Name: %s\n", p.Name)
fmt.Printf("Email: %s\n", p.Email)
fmt.Printf("Age: %d\n", p.Age)
fmt.Printf("Role: %s\n", p.Role)
}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