Sobes.tech
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í