Sobes.tech
Назад к вопросам
Middle+
3

Как реализовано наследование в Go?

Компании, где спрашивали
Magnit Tech

Ответ от нейросети

sobes.tech AI

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

Структура может включать другую структуру как поле без имени, что позволяет "наследовать" её методы и поля. Это обеспечивает повторное использование кода и позволяет строить сложные типы из простых.

Пример:

package main
import "fmt"

type Animal struct {
    Name string
}

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

type Dog struct {
    Animal // встраивание
}

func main() {
    d := Dog{Animal{Name: "Бобик"}}
    d.Speak() // вызов метода Animal
}

Здесь Dog "наследует" метод Speak от Animal через встраивание. Такой подход позволяет гибко строить иерархии без классического наследования.