Структура описывает данные, а обычный интерфейс Go — требуемые методы. Именованный функциональный тип может реализовать интерфейс, если у него есть нужные методы.
Что в Go должны описывать структура и интерфейс: какие данные и какое поведение? Может ли функция соответствовать интерфейсу?
Структура описывает данные, а обычный интерфейс Go — требуемые методы. Именованный функциональный тип может реализовать интерфейс, если у него есть нужные методы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Структура описывает данные, а обычный интерфейс Go — требуемые методы. Именованный функциональный тип может реализовать интерфейс, если у него есть нужные методы.
Пример адаптера:
type Runner interface { Run() }
type RunFunc func()
func (f RunFunc) Run() { f() }
Теперь RunFunc соответствует Runner. Обычная функция func() без объявленного метода Run автоматически интерфейс не реализует. Проверка соответствия в Go не требует явного implements: важен набор методов. Пример предполагает ненулевую функцию; вызов nil RunFunc приведёт к panic.