Menu
Coddy logo textTech

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) // Diana

Verwendung von var und anschließendes Zuweisen von Feldern

var p6 Person
p6.Name = "Eve"
p6.Age = 22

Die Initialisierung benannter Felder ist der gebräuchlichste und lesbarste Ansatz. Verwenden Sie &, wenn Sie einen Zeiger auf das Struct benötigen.

challenge icon

Aufgabe

Mittel

Erstellen 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) // Diana

Verwendung von var und anschließende Zuweisung der Felder:

var p6 Person
p6.Name = "Eve"
p6.Age = 22

Probier 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)
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung