Как использовать embedding (встраивание) для имитации наследования в Go?

В Go нет классического наследования, как в объектно-ориентированных языках, но можно использовать embedding (встраивание) для повторного использования кода и имитации наследования.

Короткий ответ

Что ответить на собеседовании

В Go нет классического наследования, как в объектно-ориентированных языках, но можно использовать embedding (встраивание) для повторного использования кода и имитации наследования.

Подробный разбор

Ответ с пояснениями

В Go нет классического наследования, как в объектно-ориентированных языках, но можно использовать embedding (встраивание) для повторного использования кода и имитации наследования.

Embedding — это включение одного типа (обычно структуры) внутрь другого без явного указания поля. Это позволяет "унаследовать" методы встроенного типа и использовать их напрямую.

Пример:

package main

import "fmt"

type Animal struct {
    Name string
}

func (a Animal) Speak() {
    fmt.Println(a.Name, "говорит")
}

type Dog struct {
    Animal // embedding
    Breed string
}

func main() {
    d := Dog{
        Animal: Animal{Name: "Шарик"},
        Breed:  "Овчарка",
    }
    d.Speak() // вызов метода Animal через Dog
}

Здесь Dog встраивает Animal, и получает доступ к его методам напрямую, что похоже на наследование. Таким образом embedding позволяет композиционно расширять функциональность типов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее