Menu
CoddyTech

Struktury osadzone

Część sekcji Podstawy ścieżki GO w Coddy. Lekcja 99 z 109.

Go pozwala osadzać jedną strukturę w innej, tworząc relacje kompozycji. To podejście Go do dziedziczenia.

Zdefiniuj dwie struktury, z których jedna jest osadzona w drugiej:

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // osadzona struktura (bez nazwy pola)
}

func main() {
    person := Person{
        name: "Alice",
        age: 30,
        Address: Address{city: "Portland", state: "Oregon"},
    }
    
    // Uzyskaj bezpośredni dostęp do pól
    fmt.Println(person.city)  // Uzyskaj dostęp do osadzonego pola
}

Wynik pokazuje, że możemy bezpośrednio uzyskać dostęp do pól zagnieżdżonej struktury:

Portland
challenge icon

Wyzwanie

Początkujący

W tym wyzwaniu poćwiczysz korzystanie z osadzonych struktur (kompozycji) w Go.

Mamy dwie struktury: Address i Person. Struktura Person powinna osadzać strukturę Address, aby można było bezpośrednio uzyskać dostęp do pól adresu.

Twoim zadaniem jest uzupełnienie definicji struktury Person tak, aby osadzała strukturę Address. Instrukcje drukowania w main odczytują już pola adresu bezpośrednio z osoby (person.Street, person.City, person.ZipCode); zostaną skompilowane, gdy Address będzie osadzona.

Spróbuj swoich sił

package main

import "fmt"

// Struktura Address zawiera informacje o lokalizacji
type Address struct {
	Street  string
	City    string
	ZipCode string
}

// Struktura Person powinna osadzać strukturę Address
type Person struct {
	Name string
	Age  int
	// TODO: Osadź tutaj strukturę Address (tylko jedna linia)
}

func main() {
	// Utwórz nową osobę z informacjami adresowymi
	person := Person{
		Name: "Alice",
		Age:  30,
		Address: Address{
			Street:  "123 Main St",
			City:    "Wonderland",
			ZipCode: "12345",
		},
	}

	// Wypisz informacje o osobie, w tym adres
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// Wypisz pola adresu bezpośrednio z instancji Person
	fmt.Println("Street:", person.Street)
	fmt.Println("City:", person.City)
	fmt.Println("ZipCode:", person.ZipCode)
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Go online