Struct-Initialisierung
Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 9 von 107.
Go bietet verschiedene Möglichkeiten, Structs zu initialisieren, die jeweils in unterschiedlichen Situationen nützlich sind.
Initialisierung mit benannten Feldern
type Person struct {
Name string
Age int
City string
}
p1 := Person{
Name: "Alice",
Age: 25,
City: "New York",
}Positionale Initialisierung (Reihenfolge muss mit der Felddeklaration übereinstimmen)
p2 := Person{"Bob", 30, "London"}Nullwert-Initialisierung (alle Felder erhalten Standardwerte)
p3 := Person{}
// Name: "", Age: 0, City: ""
Teilweise Initialisierung (nicht gesetzte Felder erhalten Nullwerte)
p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""
Zeiger auf ein Struct unter Verwendung von &
p5 := &Person{
Name: "Diana",
Age: 28,
City: "Paris",
}
fmt.Println(p5.Name) // DianaVerwendung von var und anschließendes Zuweisen von Feldern
var p6 Person
p6.Name = "Eve"
p6.Age = 22Die Initialisierung benannter Felder ist der gebräuchlichste und lesbarste Ansatz. Verwenden Sie &, wenn Sie einen Zeiger auf das Struct benötigen.
Aufgabe
MittelErstellen Sie drei Player-Objekte unter Verwendung verschiedener Initialisierungsmethoden:
- player1: Initialisierung mit benannten Feldern unter Verwendung der Eingabewerte
- player2: Initialisierung mit benannten Feldern mit Name: "Guest", Class: "Novice", HitPoints: 50
- player3: Verwenden Sie die
var-Deklaration und weisen Sie dann jedes Feld einzeln zu
Spickzettel
Go bietet verschiedene Möglichkeiten, Structs zu initialisieren:
Initialisierung mit benannten Feldern (am gebräuchlichsten und lesbarsten):
p1 := Person{
Name: "Alice",
Age: 25,
City: "New York",
}Positionale Initialisierung (die Reihenfolge muss der Felddeklaration entsprechen):
p2 := Person{"Bob", 30, "London"}Nullwert-Initialisierung (alle Felder erhalten Standardwerte):
p3 := Person{}
// Name: "", Age: 0, City: ""Teilweise Initialisierung (nicht gesetzte Felder erhalten Nullwerte):
p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""Pointer auf ein Struct unter Verwendung von &:
p5 := &Person{
Name: "Diana",
Age: 28,
}
fmt.Println(p5.Name) // DianaVerwendung von var und anschließende Zuweisung der Felder:
var p6 Person
p6.Name = "Eve"
p6.Age = 22Probier es selbst
package main
import "fmt"
func main() {
var name, class string
var hp int
fmt.Scan(&name, &class, &hp)
// TODO: Erstelle player1 unter Verwendung der Initialisierung mit benannten Feldern und den Eingabewerten
// TODO: Erstelle player2 unter Verwendung der Initialisierung mit benannten Feldern:
// Name: "Guest", Class: "Novice", HitPoints: 50
// TODO: Erstelle player3 unter Verwendung der var-Deklaration und weise dann die Felder zu:
// Name: "Hero", Class: "Knight", HitPoints: 200
fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}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