Menu
CoddyTech

Eingebettete Structs

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

In Go kannst du eine Struct in eine andere einbetten und so Kompositionsbeziehungen herstellen. Das ist Gos Ansatz zur Vererbung.

Definiere zwei Structs, wobei eines in das andere eingebettet ist:

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // eingebettete Struktur (ohne Feldnamen)
}

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

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

Portland
challenge icon

Aufgabe

Anfänger

In dieser Herausforderung übst du die Verwendung eingebetteter Structs (Komposition) in Go.

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

Deine Aufgabe ist es, die Definition des Structs Person zu vervollständigen, sodass es das Struct Address einbettet. Die Print-Anweisungen in main lesen die Adressfelder bereits direkt aus der Person (person.Street, person.City, person.ZipCode); sie lassen sich kompilieren, sobald Address eingebettet ist.

Probier es selbst

package main

import "fmt"

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

// Das Struct Person soll das Struct Address einbetten
type Person struct {
	Name string
	Age  int
	// TODO: Das Struct Address hier einbetten (nur eine Zeile)
}

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

	// Personeninformationen einschließlich der Adresse ausgeben
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// Die Adressfelder direkt aus der Instanz von Person ausgeben
	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

Übe selbstständig: Online-Go-Compiler