Загрузка…
Загрузка…
В Go реализация интерфейса неявная: считается, что тип реализует интерфейс, если он имеет весь необходимый набор методов. Поэтому проверка возможна как на этапе компиляции, так и во время выполнения.
Самый надежный подход — добавить утверждение во время компиляции:
Что это значит:
Если *MyType не реализует MyInterface, код не будет компилироваться.
Это документирует контракт типа непосредственно в базе кода.
Особенно полезно для общедоступных API, адаптеров и больших команд.
Когда существует значение типа any/interface, используется утверждение типа:
ok == true — значение реализует интерфейс.
ok == false — не реализуется.
Вариант без ok может вызвать панику, поэтому в рабочем коде обычно используется
безопасная форма с ok.
Наборы методов T и *T различаются.
Часто именно *T реализует интерфейс, а T — нет.
На собеседовании важно четко говорить об этом моменте, потому что
Лучше всего исправить реализацию интерфейса с помощью утверждения во время компиляции и использовать проверку во время выполнения через утверждение, где тип значения известен только во время выполнения.
В Go реализация интерфейса неявная: считается, что тип реализует интерфейс, если он имеет весь необходимый набор методов.
