Что такое интерфейс в Go? Как работает duck typing? Можно ли проверить реализацию интерфейса во время компиляции?

В Go интерфейс — это набор методов, которые должен реализовать тип, чтобы считаться реализацией этого интерфейса.

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

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

В Go интерфейс — это набор методов, которые должен реализовать тип, чтобы считаться реализацией этого интерфейса. Интерфейсы в Go неявно реализуются: если тип имеет все методы интерфейса, то он автоматически его реализует — это и есть пример duck typing ("если что-то ходит как утка и крякает как утка, значит это утка").

Подробный разбор

Ответ с пояснениями

В Go интерфейс — это набор методов, которые должен реализовать тип, чтобы считаться реализацией этого интерфейса. Интерфейсы в Go неявно реализуются: если тип имеет все методы интерфейса, то он автоматически его реализует — это и есть пример duck typing ("если что-то ходит как утка и крякает как утка, значит это утка").

Duck typing позволяет писать более гибкий и расширяемый код без явного указания реализации интерфейса.

Проверка реализации интерфейса во время компиляции возможна с помощью присваивания пустого значения интерфейса переменной конкретного типа или с помощью _var _ интерфейс = (*Тип)(nil). Например:

var _ io.Reader = (*MyType)(nil) // проверка, что MyType реализует io.Reader

Если MyType не реализует все методы io.Reader, компилятор выдаст ошибку.

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

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

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

Подробнее