Как адаптировать функцию к интерфейсу Go

Создайте именованный функциональный тип и реализуйте на нём метод Handle, делегирующий вызов функции. Совпадение сигнатуры функции само по себе интерфейс не реализует.

Короткий ответ

Что ответить на собеседовании

Создайте именованный функциональный тип и реализуйте на нём метод 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-функция при вызове паникует, поэтому её допустимость нужно оговорить.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее