Struktury osadzone
Część sekcji Podstawy ścieżki GO w Coddy. Lekcja 99 z 109.
Go pozwala osadzać jedną strukturę w drugiej, 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 uzyskać bezpośredni dostęp do pól osadzonej struktury:
PortlandWyzwanie
PoczątkującyW tym wyzwaniu poćwiczysz używanie osadzonych struktur (kompozycji) w Go.
Mamy dwie struktury: Address i Person. Struktura Person powinna osadzać strukturę Address, aby osoba mogła bezpośrednio uzyskiwać dostęp do pól adresu.
Twoim zadaniem jest uzupełnienie definicji struktury Person, aby osadzała strukturę Address, a następnie uzyskanie bezpośredniego dostępu do pól adresu z instancji osoby.
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 o adresie
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)
// TODO: Wypisz pola adresu bezpośrednio z instancji person
// (bez używania person.Address.Street itd.)
fmt.Println("Street:", person.Street)
fmt.Println("City:", person.City)
fmt.Println("ZipCode:", person.ZipCode)
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory porównania i logiczne
Operatory porównania – część 1Operatory porównania – część 2Logiczny operator ANDLogiczny operator ORLogiczny operator NOTPodstawy kolejności wykonywania operatorówPodsumowanie – porównywanie7Sterowanie przepływem: pętle
Jak działa pętla `for`Pętla `for` — podstawyPętla `for` — tylko warunekSłowo kluczowe `break`Słowo kluczowe `continue`Pętle zagnieżdżonePodsumowanie — powtarzanie działań2Zmienne i podstawowe typy danych
Czym jest zmiennaWnioskowanie o typie za pomocą `:=`Liczby całkowite (int)Liczby zmiennoprzecinkoweWartości logiczneCiągi znakówWartości zeroweStałeKonwencje nazewnictwaPodsumowanie – zmienne i typy5Podstawowe wejście/wyjście
Formatowane wyjścieSpecyfikatory formatuWyświetlanie typówPobieranie podstawowych danych od użytkownikaPodsumowanie — wejście i wyjście8Funkcje
Zrozumienie funkcjiDeklarowanie funkcjiWywoływanie funkcjiParametry funkcjiZwracanie jednej wartościZwracanie wielu wartościNazwane wartości zwracanePodstawy zakresu funkcjiPodsumowanie — tworzenie wielokrotnego użytku kodu11Typy złożone: wycinki
Wprowadzenie do wycinkówDeklarowanie literałów wycinkówTworzenie wycinków za pomocą `make`Długość a pojemność wycinkaDostęp do elementów wycinkaDodawanie elementówWycinanie z istniejących wycinków i tablicIterowanie po wycinkachKopiowanie wycinkówPodsumowanie — listy dynamiczne3Podstawowe operatory
Operatory arytmetyczneOperator dzieleniaOperator moduloOperator przypisaniaOperatory przypisania z działaniemZwiększanie i zmniejszaniePowtórka – obliczenia6Sterowanie przepływem: instrukcje warunkowe
Instrukcja `if`Słowo kluczowe `else`Słowo kluczowe `else if`Przesłanianie zmiennych w `if`Inicjalizacja zmiennychInstrukcja `switch``switch` z wyrażeniami`switch` bez wyrażeniaSłowo kluczowe `fallthrough`Podsumowanie — podejmowanie decyzjiPoćwicz samodzielnie: Kompilator Go online