Перейти встраивание: метод не наследуется - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь проверить встраивание, а следующий код не компилируется:

type Parent struct {}

func (p *Parent) Foo() {
}

type Child struct {
    p *Parent
}

func main() {
    var c Child
    c.Foo()
}

с

./tmp2.go:18:3: c.Foo undefined (type Child has no field or method Foo)

Что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Когда вы пишете:

type Child struct {
    p *Parent
}

Вы не встраиваете Parent, вы просто объявляете некоторый экземпляр var p типа *Parent.

Для вызова p методов вы должны переадресовать вызов на p

func (c *Child) Foo() {
    c.p.Foo()
}

Встраивая вы можете избежать этой бухгалтерии, и синтаксис будет

type Child struct {
    *Parent
}
0 голосов
/ 15 декабря 2018

Вы должны либо позвонить

c.p.Foo()

, либо изменить дочернюю структуру на эту:

type Child struct {
    *Parent
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...