Kako je organizovan objekto-orijentisani model u Go?
sobes.tech АИ
Одговор од АИ
U Go ne postoji tradicionalni objektno-orijentisani model sa dubokom hijerarhijom nasleđivanja klasa. Umesto toga, koriste se:
-
Strukture (Structs): Definišu polja podataka, slično klasama bez metoda.
type Person struct { Name string Age int } -
Metode: Funkcije povezane sa određenom strukturom. Definišu se odvojeno od strukture.
func (p Person) Greet() string { return "Zdravo, moje ime je " + p.Name } func (p *Person) CelebrateBirthday() { p.Age++ }- Metode sa prijemnikom po vrednosti (npr.,
(p Person)) rade sa kopijom strukture. - Metode sa prijemnikom po pokazivaču (npr.,
(p *Person)) rade sa originalom strukture, omogućavajući izmene njenih polja.
- Metode sa prijemnikom po vrednosti (npr.,
-
Interfejsi (Interfaces): Skupovi potpisa metoda. Tipovi koji implementiraju sve metode interfejsa implicitno ga ispunjavaju. Ovo je osnova polimorfizma u Go.
type Greeter interface { Greet() string } // Person implicitno implementira Greeter -
Kompozicija (Ugrađivanje): Umesto nasleđivanja, jedna struktura može da ugrađuje drugu strukturu, dobijajući pristup njenim poljima i metodama.
type Employee struct { Person // Ugrađuje strukturu Person ID string } func (e Employee) GetID() string { return e.ID }Ugrađena polja i metode su dostupne direktno:
e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Name) // Pristup polju Name putem ugrađene Person fmt.Println(e.Greet()) // Pozivanje metode Greet putem ugrađene Person fmt.Println(e.GetID()) // Pozivanje metode Employee
Na ovaj način, objektno-orijentisani model u Go zasniva se na kompoziciji struktura i ponašanju definisanom putem interfejsa, a ne na klasičnoj hijerarhiji nasleđivanja klasa.