Struktury jako klasy
Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 6 z 107.
Struktury w Go pełnią tę samą funkcję co klasy w innych językach. Łączą powiązane dane w jeden typ.
Zdefiniuj strukturę z polami różnych typów
type Car struct {
Brand string
Model string
Year int
Price float64
}Utwórz instancję, używając nazw pól
car := Car{
Brand: "Toyota",
Model: "Camry",
Year: 2023,
Price: 28000.50,
}Uzyskiwanie dostępu do pól i ich modyfikowanie
fmt.Println(car.Brand) // Toyota
fmt.Println(car.Year) // 2023
car.Price = 27000.00 // Zmodyfikuj pole
fmt.Println(car.Price) // 27000Struktury mogą zawierać inne struktury
type Engine struct {
Horsepower int
FuelType string
}
type Car struct {
Brand string
Model string
Engine Engine
}
car := Car{
Brand: "Ford",
Model: "Mustang",
Engine: Engine{Horsepower: 450, FuelType: "Gasoline"},
}
fmt.Println(car.Engine.Horsepower) // 450Struktury grupują powiązane pola. Dostęp do pól uzyskujesz za pomocą operatora kropki, a struktury możesz zagnieżdżać w innych strukturach, aby tworzyć złożone modele danych.
Wyzwanie
ŚredniZdefiniuj strukturę Profile z następującymi polami:
Name: ciąg znakówEmail: ciąg znakówAge: liczba całkowitaRole: ciąg znaków
Spróbuj swoich sił
package main
import "fmt"
func main() {
var name, email, role string
var age int
fmt.Scan(&name, &email, &age, &role)
p := Profile{
Name: name,
Email: email,
Age: age,
Role: role,
}
fmt.Printf("Name: %s\n", p.Name)
fmt.Printf("Email: %s\n", p.Email)
fmt.Printf("Age: %d\n", p.Age)
fmt.Printf("Role: %s\n", p.Role)
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP w Go
Pliki zewnętrzneObszar roboczy i moduły GoPakiety i importyNazwy eksportowane i nieeksportowaneWprowadzenie do OOP w GoStruktury jako klasyDefiniowanie metod dla strukturOdbiorniki wskaźnikowe i wartościoweInicjalizacja strukturFunkcje konstruktoraPodsumowanie – prosty kalkulator4Interfejsy
Wprowadzenie do interfejsówImplementacja niejawnaInterfejs jako kontraktPusty interfejs (any)Asercja typuPrzełącznik typówKompozycja interfejsówInterfejsy Stringer i ErrorPowtórka — kalkulator figur7Hermetyzacja
Pola eksportowane i nieeksportowaneHermetyzacja na poziomie pakietuMetody pobierające i ustawiająceUkrywanie informacji w GoPowtórka – dane studentów10Typy generyczne (Go 1.18+)
Wprowadzenie do typów generycznychParametry typówOgraniczenia typówStruktury generyczneObejście ograniczeń metod generycznychPodsumowanie — generyczna kolekcja2Typy i struktury w praktyce
Typy proste i złożoneDefiniowanie własnych typówTagi pól strukturStruktury anonimoweStruktury zagnieżdżoneWartości zerowe i domyślnePodsumowanie – książka kontaktów5Kompozycja zamiast dziedziczenia
Dlaczego Go nie ma dziedziczeniaPodstawy osadzania strukturPromowanie metodOsadzanie wielu strukturOsadzanie a agregacjaPrzesłanianie osadzonych metodPodsumowanie — hierarchia pracowników8Obsługa błędów i programowanie obiektowe
Interfejs błęduWłasne typy błędówOpakowywanie błędów (fmt.Errorf)Błędy wartowniczeerrors.Is() i errors.As()Panic, Defer i RecoverPodsumowanie — parser plików3Wskaźniki i pamięć
Podstawy wskaźników w GoWskaźniki do strukturPrzekazywanie przez wartość a przez referencjęFunkcja new()Odśmiecanie pamięci w GoPowtórka — kreator listy wiązanej6Polimorfizm w Go
Polimorfizm za pomocą interfejsówDuck typing w GoZasady spełniania interfejsówKolekcje polimorficzneWstrzykiwanie zależnościPowtórka — procesor płatności9Współbieżność i OOP
Podstawy goroutinesKanały i komunikacjaKanały buforowane i niebuforowaneInstrukcja selectsync.Mutex i sync.RWMutexsync.WaitGroupProjektowanie struktur bezpiecznych wątkowoPowtórka – pula workerów12Zaawansowane zagadnienia programowania obiektowego
Wzorzec opcji funkcyjnychWzorzec Builder w GoŁańcuchowe wywoływanie metodAliasy typów a definicje typówPodstawy refleksjiPrzegląd generowania koduPoćwicz samodzielnie: Kompilator Go online