новое и не нужное :)
Сложный вопрос на самом деле. Особо красиво (доступно) на него не смогу ответить. 1. Вообще благодаря ему можно реализовать параметрический полиморфизм. Что уменьшает дублирование. 2. Также, благодаря тому, что функций будет принимать интерфейс, а не конкретный тип, то можно не завязываться на этот самый конкретный тип. Что ведет к модульности и меньшей связанности кода. upd то есть в том пакете, где функция принимает интерфейс ты не делаешь импорт пакета, в котором тот тип, который тебе надо принять. Другими словами ты можешь принимать вообще любой тип, который реализует интерфейс
Но тут можно выстрелить себе в ногу, если вместо типа передавать тырфэйс. Оно скорее для абстракции, для связывания нескольких сущностей друг с другом. Ну и тестировать легче. Имхо.
Например есть какая-то структура, которая стучится в базу данных или делает запросы по сети, при этом у нас есть функционал который использует эту структуру. И нам например нужно тесты на это дело написать, но настоящие запросы куда-то там нам делать не хотелось бы. И вот мы можем вместо структуры подставить интерфейс, и для тестов написать фейковую "реализацию", которая на самом деле делает вид, что что-то делает, например что какой-то метод типа GetPerson(id string) (*Person, error) на самом деле не ходит в бд а просто возвращает сразу какой-то *Person. Это называется моками и возможно именно благодаря интерфейсам
Обсуждают сегодня