Вступить в клуб →
сложнаявопросОсновы Go: типы, ошибки, интерфейсы

Тип не удовлетворяет интерфейсу из-за указательного получателя

При сборке сервиса появилась ошибка компиляции в этом месте:

type Handler interface {
    Handle(ctx context.Context) error
}

type OrderService struct{ repo Repo }

func (s *OrderService) Handle(ctx context.Context) error { return nil }

func main() {
    var h Handler = OrderService{}
    _ = h
}

Что здесь не так?

  • Код соберётся: компилятор сам возьмёт адрес значения при присваивании в интерфейс
  • Код соберётся, но метод отработает на копии и изменения структуры потеряются
  • Метод объявлен на `*OrderService`, поэтому интерфейсу удовлетворяет только `&OrderService{}`
  • Интерфейс требует, чтобы все методы принимали `context.Context` первым аргументом по значению

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела