@lookingfor2

Зачем осуществляется проверка соответствия интерфейса?

Читаю про подход от uber,
https://github.com/uber-go/guide/blob/master/style.md.

Блок: Verify Interface Compliance

// ПЛОХО
type Handler struct {
  // ...
}



func (h *Handler) ServeHTTP(
  w http.ResponseWriter,
  r *http.Request,
) {
  ...
}


// ХОРОШО
type Handler struct {
  // ...
}

var _ http.Handler = (*Handler)(nil)

func (h *Handler) ServeHTTP(
  w http.ResponseWriter,
  r *http.Request,
) {
  // ...
}


В чем смысл такой проверки?

Если я передам структуру через di в другую структуру, и она не будет иметь методы требуемого интерфейса, приложение все равно не скомпилится,
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
@deliro
Смысл в том, что в го нельзя явно сказать "хочу соответствовать вот этому, вон тому и ещё вон тому интерфейсам". А это способ сделать так, чтобы компиляция сломалась при нарушении интерфейса не "где-то там когда-нибудь", а здесь и сейчас

Если я передам структуру через di в другую структуру, и она не будет иметь методы требуемого интерфейса, приложение все равно не скомпилится


Не всегда. Попробуй передай в пустой интерфейс и потом сделай switch type на этот интерфейс или даункастни его
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы