Введение в интерфейсы в Go
Интерфейс называет набор методов, который должен быть у значения. Это не отдельный тип данных с полями, а договор о том, какие действия можно вызвать. Снаружи видно только имена методов и их сигнатуры, без тела функций внутри описания.
Такой договор нужен, когда одна часть программы хочет работать с разными типами одинаково. Функция может принять не конкретную структуру, а любое значение, у которого есть нужные методы. Тогда сценарий не привязан к одному имени типа и проще менять реализацию.
В Go тип не записывают в списке «кто подходит под интерфейс». Достаточно, чтобы у типа были все методы из списка с теми же параметрами и результатами. Проверку делает компилятор в месте присваивания или передачи в параметр.
В этом разделе разберем объявление интерфейса, неявное соответствие типа, значение интерфейса с типом и содержимым внутри, несколько методов и несколько интерфейсов у одного типа, параметр интерфейса, пустой интерфейс, сравнение с пустым указателем, текстовый метод для печати, утверждение типа и переключатель по типу. Сначала научимся записывать простой интерфейс с одним методом, затем увидим, как из него достают конкретный тип обратно.