Jak wygląda model obiektowy w Go?
sobes.tech AI
Odpowiedź od AI
W Go nie ma tradycyjnego modelu obiektowego z głęboką hierarchią dziedziczenia klas. Zamiast tego używa się:
-
Struktury (Structs): Definiują pola danych, podobnie jak klasy bez metod.
type Person struct { Name string Age int } -
Metody: Funkcje powiązane z określoną strukturą. Są definiowane oddzielnie od struktury.
func (p Person) Greet() string { return "Cześć, nazywam się " + p.Name } func (p *Person) CelebrateBirthday() { p.Age++ }- Metody z odbiornikiem wartości (np.
(p Person)) pracują na kopii struktury. - Metody z odbiornikiem wskaźnikowym (np.
(p *Person)) pracują na oryginale struktury, umożliwiając modyfikację jej pól.
- Metody z odbiornikiem wartości (np.
-
Interfejsy: Zbiory sygnatur metod. Typy implementujące wszystkie metody interfejsu niejawnie spełniają ten interfejs. To jest podstawa polimorfizmu w Go.
type Greeter interface { Greet() string } // Person niejawnie implementuje Greeter -
Kompozycja (Wbudowanie): Zamiast dziedziczenia, jedna struktura może wbudować inną strukturę, uzyskując dostęp do jej pól i metod.
type Employee struct { Person // Wbudowujemy strukturę Person ID string } func (e Employee) GetID() string { return e.ID }Wbudowane pola i metody są dostępne bezpośrednio:
e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Name) // Dostęp do pola Name przez wbudowaną Person fmt.Println(e.Greet()) // Wywołanie metody Greet przez wbudowaną Person fmt.Println(e.GetID()) // Wywołanie metody Employee
W ten sposób, model obiektowy w Go opiera się na kompozycji struktur i zachowaniu określonym przez interfejsy, a nie na klasycznej hierarchii dziedziczenia klas.