Sobes.tech
Middle

Quale meccanismo esiste in Go: ereditarietà o composizione?

sobes.tech AI

Risposta dell'AI

В Go отсутствует классическое наследование, как в объектно-ориентированных языках типа Java или C++. Вместо этого Go использует композицию и интерфейсы для повторного использования кода и полиморфизма.

Композиция в Go достигается путем включения одного типа в другой как поле без имени (embedding). Это позволяет новому типу автоматически иметь методы вложенного типа, что похоже на наследование, но более гибко и явно.

Пример композиции:

type Logger struct {
    prefix string
}

func (l Logger) Log(message string) {
    fmt.Println(l.prefix, message)
}

// Встраиваем Logger в App

type App struct {
    Logger
    name string
}

func main() {
    app := App{
        Logger: Logger{prefix: "[App]"},
        name:   "MyApp",
    }
    app.Log("started") // вызов метода Logger через композицию
}

Таким образом, композиция — основной механизм повторного использования и расширения функционала в Go.