170 похожих чатов

Какую задачу интерфейс решает? как начать его использовать, пока чет

новое и не нужное :)

3 ответов

5 просмотров

Сложный вопрос на самом деле. Особо красиво (доступно) на него не смогу ответить. 1. Вообще благодаря ему можно реализовать параметрический полиморфизм. Что уменьшает дублирование. 2. Также, благодаря тому, что функций будет принимать интерфейс, а не конкретный тип, то можно не завязываться на этот самый конкретный тип. Что ведет к модульности и меньшей связанности кода. upd то есть в том пакете, где функция принимает интерфейс ты не делаешь импорт пакета, в котором тот тип, который тебе надо принять. Другими словами ты можешь принимать вообще любой тип, который реализует интерфейс

Rostislav Teryaev
Сложный вопрос на самом деле. Особо красиво (досту...

Но тут можно выстрелить себе в ногу, если вместо типа передавать тырфэйс. Оно скорее для абстракции, для связывания нескольких сущностей друг с другом. Ну и тестировать легче. Имхо.

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

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
11
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Карта сайта