Sobes.tech
Back to questions
Principal
14

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

Companies where asked
Avosend

Answer from AI

sobes.tech AI

В 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 позволяет композиционно расширять функциональность типов.