Middle
Jak jsou v jazyce Go realizovány koncepty objektově orientovaného programování (OOP)?
sobes.tech AI
Odpověď od AI
V jazyce Go neexistují klasické koncepty tříd, dědičnosti a virtuálních metod, které jsou běžné v jiných jazycích (Java, C++). Objektově orientované programování je realizováno prostřednictvím:
- Struktur (Structs): Skupiny dat (poli).
type Person struct { Name string Age int } - Metody: Funkce s přiřazeným příjemcem (strukturou nebo jiným typem). Umožňují strukturám mít chování.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Příjemce podle hodnoty: Metoda pracuje s kopií struktury. Změny uvnitř metody neovlivní původní strukturu.
- Příjemce podle ukazatele: Metoda pracuje s původní strukturou přes ukazatel. Změny uvnitř metody ovlivní původní strukturu.
- Rozhraní (Interfaces): Definují sadu signatur metod, které musí typ splnit. Zajišťují polymorfismus "podle kachního typu" (
duck typing). Typ implicitně implementuje rozhraní, pokud implementuje všechny jeho metody.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Vkládání (Embedding): Umožňuje jedné struktuře "vkládat" jinou strukturu nebo rozhraní. Není to dědičnost v klasickém smyslu, spíše kompozice. Vkládaná struktura se stává anonymním polem, ke kterému lze přímo přistupovat přes instanci vkládající struktury.
type Employee struct { Person // vložená struktura ID string } // Employee nyní má pole Name a Age, a také metodu Greet() e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // volání metody Greet() struktury Person přes Employee
| Koncept OOP | Implementace v Go | Poznámky |
|---|---|---|
| Třídy | Structy | Neexistuje explicitní klíčové slovo class |
| Zapouzdření | Exportovaná (velké písmeno) / neexportovaná (malé písmeno) pole/metody | Kontrola viditelnosti na úrovni balíčku |
| Dědičnost | Vkládání (Embedding) | Kompozice místo hierarchické dědičnosti |
| Polymorfismus | Rozhraní | Duck typing, implicitní implementace rozhraní |