Создайте именованный функциональный тип и реализуйте на нём метод Handle, делегирующий вызов функции. Совпадение сигнатуры функции само по себе интерфейс не реализует.
Как адаптировать функцию к интерфейсу Go
Создайте именованный функциональный тип и реализуйте на нём метод Handle, делегирующий вызов функции. Совпадение сигнатуры функции само по себе интерфейс не реализует.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Есть type Handler interface { Handle(string) error } и функция func(string) error. Как передать функцию туда, где ожидается Handler, без отдельной структуры с полем?
Ответ
Создайте именованный функциональный тип и реализуйте на нём метод Handle, делегирующий вызов функции. Совпадение сигнатуры функции само по себе интерфейс не реализует.
Пример:
type HandlerFunc func(string) error
func (f HandlerFunc) Handle(value string) error { return f(value) }
Тогда var h Handler = HandlerFunc(myFunction). У интерфейса проверяется набор методов; для второго интерфейса с другой сигнатурой потребуется соответствующий метод. Nil-функция при вызове паникует, поэтому её допустимость нужно оговорить.