Наследование структур в 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 шт):
В языке 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)