в соседнем пакете, нежеле в самом пакете где он и реализуется? И зачем вообще первый случай
Go-way Технически разницы никакой, но первый случай часто предпочтителен так как у интерфейса может быть несколько реализаций, расположенных в разных пакетах. Таким образом пакет, который использует интерфейс диктует контракт
Ну и не создаются зависимости на другие пакеты конечно
Т.е допустим присоздании экземпляра push struct в котором pusher interface {push(ctx, msg string)}, мы же все равно импортируем пакет в котором он и реализован anypackage.push
Идея гласит как раз то, что вам стоит объявлять интерфейсы там где вы их используете, то есть package a type Pusher interface { /* ... */ } type pusher struct { p Pusher } func New(p Pusher) *pusher {} package b type specificPusher struct{} func (sp *specificPusher) Push() {}
Обсуждают сегодня