Идем заводской метод полиморфизма с указателями - PullRequest
0 голосов
/ 12 февраля 2019
type Foo interface {
    FooMethod()
}
type BarFoo struct {
}
func (f *BarFoo) FooMethod() {
}
func NewBarFoo() *Foo {
    return &BarFoo{}
}

Ошибка : невозможно использовать '& BarFoo {}' (тип * BarFoo) в качестве типа * Foo

Почему я получаю ошибку компиляции для такого кода?Работает ли полиморфизм для указателей?

Кстати, этот код в порядке

func NewBarFoo() Foo {
    return &BarFoo{}
}

1 Ответ

0 голосов
/ 12 февраля 2019

Вам просто нужно изменить сигнатуру функции на

func NewBarFoo() Foo {
    return &BarFoo{}
}

Вы все еще возвращаете указатель, просто так получается, что указатель реализует интерфейс

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