Ako funguje objektovo orientovaný model v Go?
sobes.tech AI
Odpoveď od AI
V jazyku Go neexistuje tradičný objektovo orientovaný model s hlbokou hierarchiou dedičnosti tried. Namiesto toho sa používajú:
-
Štruktúry (Structs): Definujú dátové polia, podobne ako triedy bez metód.
type Person struct { Name string Age int } -
Metódy: Funkcie viazané na konkrétnu štruktúru. Sú definované oddelene od štruktúry.
func (p Person) Greet() string { return "Ahoj, volám sa " + p.Name } func (p *Person) CelebrateBirthday() { p.Age++ }- Metódy s prijímačom hodnoty (napríklad
(p Person)) pracujú s kópiou štruktúry. - Metódy s prijímačom ukazovateľa (napríklad
(p *Person)) pracujú s originálom štruktúry, čo umožňuje meniť jej polia.
- Metódy s prijímačom hodnoty (napríklad
-
Rozhrania (Interfaces): Súbory podpisov metód. Typy, ktoré implementujú všetky metódy rozhrania, nevedomky ho spĺňajú. Toto je základ polymorfizmu v Go.
type Greeter interface { Greet() string } // Person nevedomky implementuje Greeter -
Kompózícia (Vkladanie): Namiesto dedičnosti môže jedna štruktúra vkladať inú štruktúru, čím získa prístup k jej poliam a metódam.
type Employee struct { Person // Vkladá štruktúru Person ID string } func (e Employee) GetID() string { return e.ID }Vložené polia a metódy sú dostupné priamo:
e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Name) // Prístup k poľu Name cez vloženú Person fmt.Println(e.Greet()) // Volanie metódy Greet cez vloženú Person fmt.Println(e.GetID()) // Volanie metódy Employee
Takto je objektovo orientovaný model v Go založený na kompozícii štruktúr a správaní definovanom rozhraniami, nie na klasickej hierarchii dedičnosti tried.