Наследование структур в Golang

Есть 2 структуры

type parent struct {
   field1 string
}
type child struct {
   parent
   field2 int
}

на выходе получается

type child struct {
   parent: parent{
      field1 string
   }
   field2 int
}

Как добиться наследования без создания отдельного поля parent Как сделать чтобы на выходе было так

type child {
    field1 string
    field2 int
}

Ответы (1 шт):

Автор решения: dikey0ficial

В языке Go нет наследования — есть только композиция (встраивание):

type X struct {
    Value int
    /* ... */
}

func (x X) GetValue() int { return x.Value }

type Y struct {
    X
    /* ... */
}

type Z struct {
    X X
    /* ... */
}

При этом обратите внимание, что встраивание в структурах Y и Z разное — в первом случае оно "безымянное", благодаря чему можно вызывать методы X прямо из структуры Y (пример: Y{}.GetValue() вернёт 0 как значение int по умолчанию), а во втором случае создаётся поле Z типа Z, из-за чего вызывать методы нельзя (пример: Z{}.GetValue() вызовет ошибку при компиляции).

Сделать, чтобы к полю Value из структуры X можно было обратиться из структуры Y или Z нельзя (в вашем случае обратиться к полю field1 из child)

→ Ссылка