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

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

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

3 ответов

19 просмотров

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

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

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

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта