Menu
Coddy logo textTech

Struktury zagnieżdżone

Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 16 z 107.

Zagnieżdżona struktura to struktura, która zawiera inną nazwaną strukturę jako jedno ze swoich pól. Pozwala to modelować złożone, hierarchiczne dane przez łączenie mniejszych, wielokrotnego użytku typów.

type Address struct {
    Street string
    City   string
    ZIP    string
}

type Person struct {
    Name    string
    Age     int
    Address Address  // zagnieżdżona struktura
}

Aby uzyskać dostęp do pól w zagnieżdżonej strukturze, łączysz nazwy pól kropkami.

p := Person{
    Name: "Alice",
    Age:  30,
    Address: Address{
        Street: "123 Main St",
        City:   "Boston",
        ZIP:    "02101",
    },
}

fmt.Println(p.Address.City) // Boston

Zagnieżdżanie sprzyja ponownemu wykorzystaniu kodu. Typu Address można używać w wielu strukturach, takich jak Person, Company czy Order, bez powielania pól. To podejście odzwierciedla rzeczywiste relacje, w których encje zawierają inne encje.

type Company struct {
    Name      string
    Employees int
    Address   Address  // ponownie użyty ten sam typ Address
}

Możesz zagnieżdżać struktury na wielu poziomach, choć płytkie hierarchie poprawiają czytelność. Zagnieżdżone struktury są podstawą tworzenia obiektowych modeli danych w Go.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system zarządzania pracownikami, który pokazuje, jak zagnieżdżone struktury pomagają modelować hierarchie z prawdziwego świata. Utworzysz strukturę, w której pracownicy należą do działów, a działy mają informacje o lokalizacji.

Rozmieścisz kod w dwóch plikach:

  • models.go: Zdefiniuj trzy współpracujące ze sobą struktury:
    • Location z polami Building (string) i Floor (int)
    • Department z polem Name (string) oraz zagnieżdżonym polem Location
    • Employee z polami ID (int), Name (string) oraz zagnieżdżonym polem Department
  • main.go: Wczytaj informacje o pracowniku z danych wejściowych, utwórz strukturę Employee z prawidłowo zagnieżdżonymi strukturami i wyświetl kompletny profil pracownika, uzyskując dostęp do pól za pośrednictwem zagnieżdżonej struktury.

Dane wejściowe będą następujące:

  • Wiersz 1: ID pracownika (liczba całkowita)
  • Wiersz 2: Imię i nazwisko pracownika
  • Wiersz 3: Nazwa działu
  • Wiersz 4: Nazwa budynku
  • Wiersz 5: Numer piętra (liczba całkowita)

Format wyjściowy:

Employee: [Name] (ID: [ID])
Department: [DepartmentName]
Location: [Building], Floor [Floor]

Na przykład dla danych 101, Alice Chen, Engineering, Tower A i 5 wynik powinien wyglądać następująco:

Employee: Alice Chen (ID: 101)
Department: Engineering
Location: Tower A, Floor 5

Uzyskaj dostęp do zagnieżdżonych pól, używając notacji kropkowej do przechodzenia przez hierarchię struktur (np. employee.Department.Location.Building).

Spróbuj swoich sił

package main

import "fmt"

func main() {
	// Wczytaj informacje o pracowniku
	var id int
	var name string
	var deptName string
	var building string
	var floor int

	fmt.Scanln(&id)
	fmt.Scanln(&name)
	fmt.Scanln(&deptName)
	fmt.Scanln(&building)
	fmt.Scanln(&floor)

	// TODO: Utwórz Employee z poprawnie zagnieżdżonymi strukturami
	// Użyj struktur Location, Department i Employee z pliku models.go
	// Zainicjalizuj wszystkie zagnieżdżone pola wartościami wejściowymi

	// TODO: Wyświetl profil pracownika w formacie:
	// Pracownik: [Name] (ID: [ID])
	// Dział: [DepartmentName]
	// Lokalizacja: [Building], piętro [Floor]
	// Uzyskaj dostęp do zagnieżdżonych pól za pomocą notacji kropkowej (np. employee.Department.Location.Building)
}
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Go online