@Xveeder

Почему у интерфейса по ссылке не видно его методов?

Доброго времени суток.

Есть код:

type Repo interface {
	Create(data interface{}) interface{}
}

type Service struct {
	Repository *Repo
}

type User struct {
	Name string
}

func (r *Service) Do(user User) {
	r.Repository.Create(user)
}


Так вот, в методе:

func (r *Service) Do(user User) {
	r.Repository.Create(user)
}


r.Repository не видит методов интерфейса:

6741f24b26a48404130440.png

Но если в структуре указать интерфейс не по указателю:

type Service struct {
	Repository Repo
}


То методы интерфейса становятся видны:

6741f2c2218c0978547384.png

Я определяю интерфейс и хочу чтобы реализующие данный интерфейс структуры могли быть переданы по ссылке.
  • Вопрос задан
  • 30 просмотров
Пригласить эксперта
Ответы на вопрос 1
Если не вдаваться в подробности, то - в Go интерфейсы это указатели, и в приведённом примере *Repo это указатель на указатель, поэтому и методов нет.

Так что для хранения в структуре указателя а не значения будет достаточно указать в качестве типа просто интерфейс Repo, и не указатель на него.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы