Menu
Coddy logo textTech

Eingebettete Structs

Teil des Abschnitts Grundlagen der GO-Journey von Coddy — Lektion 99 von 109.

Go ermöglicht es Ihnen, ein struct in ein anderes einzubetten und so Kompositionsbeziehungen zu erstellen. Dies ist Gos Ansatz zur Vererbung.

Definieren Sie zwei Structs, wobei eines in das andere eingebettet ist:

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // eingebettetes Struct (kein Feldname)
}

func main() {
    person := Person{
        name: "Alice",
        age: 30,
        Address: Address{city: "Portland", state: "Oregon"},
    }
    
    // Felder direkt ansprechen
    fmt.Println(person.city)  // Zugriff auf eingebettetes Feld
}

Die Ausgabe zeigt, dass wir direkt auf die Felder des eingebetteten Structs zugreifen können:

Portland
challenge icon

Aufgabe

Anfänger

In dieser Herausforderung wirst du den Einsatz von eingebetteten Structs (Komposition) in Go üben.

Wir haben zwei Structs: Address und Person. Das Person-Struct soll das Address-Struct einbetten, sodass eine Person direkt auf die Adressfelder zugreifen kann.

Deine Aufgabe ist es, die Definition des Person-Structs zu vervollständigen, um das Address-Struct einzubetten, und dann direkt von der Person-Instanz auf die Adressfelder zuzugreifen.

Spickzettel

Go verwendet Struct-Embedding für Komposition. Betten Sie ein Struct in ein anderes ein, indem Sie den Struct-Typ ohne Feldnamen angeben:

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // eingebettetes Struct (kein Feldname)
}

Greifen Sie direkt auf die Felder des eingebetteten Structs zu:

person := Person{
    name: "Alice",
    age: 30,
    Address: Address{city: "Portland", state: "Oregon"},
}

fmt.Println(person.city)  // Direkter Zugriff auf das eingebettete Feld

Probier es selbst

package main

import "fmt"

// Address struct enthält Standortinformationen
type Address struct {
	Street  string
	City    string
	ZipCode string
}

// Person struct sollte das Address struct einbetten
type Person struct {
	Name string
	Age  int
	// TODO: Bette das Address struct hier ein (nur eine Zeile)
}

func main() {
	// Erstelle eine neue Person mit Adressinformationen
	person := Person{
		Name: "Alice",
		Age:  30,
		Address: Address{
			Street:  "123 Main St",
			City:    "Wonderland",
			ZipCode: "12345",
		},
	}

	// Drucke Personeninformationen einschließlich der Adresse
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// TODO: Drucke die Adressfelder direkt von der person Instanz aus
	// (ohne person.Address.Street usw. zu verwenden)
	fmt.Println("Street:", person.Street)
	fmt.Println("City:", person.City)
	fmt.Println("ZipCode:", person.ZipCode)
}
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 Grundlagen