в интерфейсах пока непонятно, где их вообще использовать 🙂 Но опять же, у меня нет развесистых проектов. Если я до этого дойду - возможно, пойму.
Для понимания интерфейсов не надо далеко ходить. В гошке вы постоянно используете интерфейсы, хотя, возможно, вы об этом не знаете)
Итак,
error
— это интерфейс.
За счёт утиной типизации, любой тип, для которого вы реализовали метод
Error() string
можно будет передавать в качестве ошибки. Вот и всё.
https://play.golang.org/p/TPe15X9FftFДля чего и когда это можно использовать — это уже второй вопрос.
Интерфейсы — это один из видов дженериков (в широком смысле слова). Соответственно использовать их можно там, где нужно заточиться не на поведение, а не на конкретную реализацию.
Вариантов, где это можно применять тоже не один: можно строить деревья, а можно использовать для уменьшения связности компонентов в проекте и т.д.