Sobes.tech
Junior — Middle

Jak zaimplementowana jest struktura obiektowa w języku Go i czym różni się od klasycznej?

sobes.tech AI

Odpowiedź od AI

W Go programowanie obiektowe realizowane jest za pomocą kompozycji i interfejsów, a nie przez klasy i dziedziczenie, jak w klasycznym OOP.

Główne różnice:

  • Brak klas: W Go nie ma klas, zamiast tego używa się struktur (struct), które zawierają pola i metody.
  • Kompozycja zamiast dziedziczenia: Zamiast dziedziczyć struktury, można włączać jedną strukturę do drugiej, co pozwala na ponowne użycie kodu.
  • Interfejsy: Interfejsy w Go definiują zestaw metod, które musi zaimplementować struktura. Typy automatycznie implementują interfejs, jeśli mają potrzebne metody, bez konieczności jawnego deklarowania.

Przykład:

package main
import "fmt"

type Animal interface {
    Speak() string
}

type Dog struct {}

func (d Dog) Speak() string {
    return "Woof!"
}

type Cat struct {}

func (c Cat) Speak() string {
    return "Meow!"
}

func main() {
    animals := []Animal{Dog{}, Cat{}}
    for _, a := range animals {
        fmt.Println(a.Speak())
    }
}

W ten sposób, Go oferuje prostszy i bardziej elastyczny model programowania obiektowego oparty na interfejsach i kompozycji, bez złożoności klasycznego dziedziczenia.