Size: a a a

2020 June 07

s

snip in Go-go!
если есть два разных пакета нуждающихся примерно в одном и том же то это будут два разных интерфейса
источник

VL

V L in Go-go!
Anton Kucherov
В месте использования еще не означает "обязательно в кодовой базе клиента (использующего интерфейс)". Пример тому любая реализация IoC, например интерфейс http.Handler.
Тут вы его все-так не возвращаете, а используете как аргумент
источник

AK

Anton Kucherov in Go-go!
V L
Тут вы его все-так не возвращаете, а используете как аргумент
Ну это мы уже уходить начинаем от сути... И возвращаются они тоже. И ничего.
источник

s

snip in Go-go!
Anton Kucherov
Ну это мы уже уходить начинаем от сути... И возвращаются они тоже. И ничего.
да, такие кейсы есть и это нормально, речь про рекомендацию по дефолту
источник

ЗА

Заур Ашурбеков... in Go-go!
ребят, вы всё под одну гребёнку гребёте.

Если вам нужно реализовать несколько интерфейсов, особенно когда они не из вашего пакета, тут, действительно, лучше возвращать саму реализацию

Если ваш пакет реализовывает определённый сервис с родным интферфейсом, зачем усложнять всем жизнь? Это ведь и понятнее и удобнее

Что касается приведения к другим интерфейсам, так в чём проблема?
источник

AK

Anton Kucherov in Go-go!
snip
да, такие кейсы есть и это нормально, речь про рекомендацию по дефолту
Вот тут самое важное в том, что означает "по дефолту"
источник

s

snip in Go-go!
Anton Kucherov
Вот тут самое важное в том, что означает "по дефолту"
дефолт = всегда, если только ты не уверен абсолютно что у тебя особый случай
источник

AK

Anton Kucherov in Go-go!
А какие случаи считаются "особыми" и почему именно они "особые", а не наоборот? 🤔
источник

VL

V L in Go-go!
Еще это хорошо тем, что интефейс всегда аллоцируется в куче, а конкретный тип - не всегда, но это уже в сторону оптимизаций и поэтому не самый сильный аргумент.
источник

VL

V L in Go-go!
Однако непонятно почему бы не сделать сразу чуть лучше, если возможно.
источник

AK

Anton Kucherov in Go-go!
По мне так тут вообще не может идти речи о лучше и хуже, дефолтности или особости. Есть просто разные применения для  интерфейсов.
источник

s

snip in Go-go!
Anton Kucherov
А какие случаи считаются "особыми" и почему именно они "особые", а не наоборот? 🤔
особые когда по другому либо никак, либо сильно ухудшается код
источник

s

snip in Go-go!
просто идея интерфейсов в го она немного отличается от идеи интерфейсов в други х языках, хотя и призвана решать примерно те же задачи
источник

AK

Anton Kucherov in Go-go!
snip
просто идея интерфейсов в го она немного отличается от идеи интерфейсов в други х языках, хотя и призвана решать примерно те же задачи
Нет, отличается не идея, а реализация. А идея уходит корнями в  SmallTalk и его ООП
источник

VL

V L in Go-go!
Anton Kucherov
Ну это мы уже уходить начинаем от сути... И возвращаются они тоже. И ничего.
Они возвращаются, чтобы использоваться как параметр в том же пакете. Это не увеличивает связанность.
источник

s

snip in Go-go!
имеено идея
в большинстве привычных языков мы экспортируем интерфейс, а в го нет
источник

ЗА

Заур Ашурбеков... in Go-go!
V L
Они возвращаются, чтобы использоваться как параметр в том же пакете. Это не увеличивает связанность.
А когда ты возвращаешь интерфейс из того же пакета, что и сам конструктор, это увеличивает?
источник

VL

V L in Go-go!
Да, т.к. в случае изменения зависимости придется переработать больше кода, чем только вызов фабрики.
источник

AK

Anton Kucherov in Go-go!
snip
имеено идея
в большинстве привычных языков мы экспортируем интерфейс, а в го нет
А скажите пожалуйста, почему в этих языках вы экспортируете интерфейс? что мешает экспортировать реализацию и подставлять ее туда где параметром является интерфейс?
источник

VL

V L in Go-go!
Anton Kucherov
А скажите пожалуйста, почему в этих языках вы экспортируете интерфейс? что мешает экспортировать реализацию и подставлять ее туда где параметром является интерфейс?
Отсутствие утиной типизации.
источник