Структур может быть 10 разных.
У них могут быть разные методы.
Но тебе нужно на вход принимать любую структуру, с которой, например, можно читать байты.
Поэтому ты пишешь интерфейс в котором будет метод Read и ожидаешь на вход именно этот интерфейс.
И пока у твоей структуры есть такой метод Read - ты можешь туда подсунуть ЛЮБУЮ структуру, а не какую-то конкретную.
При этом, тебе не нужно явно указывать в твоей структуре, что она соответствует твоему интерфейсу. Go сам за тебя проверит это. Ему достаточно знать, что у структуры есть нужный метод.
О, очень красивое объяснение, спасибо. Тоже периодически путаюсь.
Фактически это похоже на динамическое применение ключевого слова implements из java, которое компилятор сам подставляет в контексте.
Т.е. компилятор видит, что функция на вход хочет такой-то интерфейс, проверяет, что переданная структура соответствует этому интерфейсу (наличие нужных методов) и выдаёт ошибку, если нужных методов нет.
Верно?