Size: a a a

2020 April 24

C

Calculon in Go-go!
Dmitry Zherebko
они возвращают конкретный тип
который должен имплементить интерфейс
источник

C

Calculon in Go-go!
Как я понимаю из-за import cycle not allowed этот тип не может проверить себя на соответствие интерфейсу
источник

IK

Ilya Kaznacheev in Go-go!
Dmitry Zherebko
а зачем им свои интерфейсы?
Им не нужны, а нужны потребителю этих слоев, но получается, что они изменяются всегда как-раз вместе с теми классами, на которые эти интерфейсы делаются
источник

DZ

Dmitry Zherebko in Go-go!
потребители пишут свои интерефейсы, нет?
источник

/

/dev/null in Go-go!
Ilya Kaznacheev
Господа, вот такой вопрос:
Обычно в го принято интерфейсы определять по месту использования. Ну с библиотеками это понятно (хотя когда методы возвращают объекты со своими методами, интерфейсом без обертки просто так не покроешь)

Но если мы пишем проект используя какую-нибудь слоистую архитектуру, то каждый слой потом при сборке подсоединяется через интерфейс. То есть у бд свои интерфейсы, у API внешних, у еще чего-то
Так вот вопрос - как в этом случае и где определять интерфейсы для них? Обычно эти интерфейсы меняются вместе с реализацией (добавление новых методов в DAO/DAL, например), и разумно их держать в одном пакете
С другой стороны, это не го-вейно

Как делаете?
не знаю на сколько я делаю правильно:
/store
/store.go //тут интерфейс
/store/psql/store.go // имплементация store
/store/mock/store.go //имплементация для мока
источник

IK

Ilya Kaznacheev in Go-go!
/dev/null
не знаю на сколько я делаю правильно:
/store
/store.go //тут интерфейс
/store/psql/store.go // имплементация store
/store/mock/store.go //имплементация для мока
Ну вот я примерно также
источник

/

/dev/null in Go-go!
/dev/null
не знаю на сколько я делаю правильно:
/store
/store.go //тут интерфейс
/store/psql/store.go // имплементация store
/store/mock/store.go //имплементация для мока
если нужна будет иеще одна имплементация то
/store/other/store.go
источник

C

Calculon in Go-go!
/dev/null
не знаю на сколько я делаю правильно:
/store
/store.go //тут интерфейс
/store/psql/store.go // имплементация store
/store/mock/store.go //имплементация для мока
пакеты psql/mock зачем?
источник

/

/dev/null in Go-go!
С одной стороны хочется в одном пакете сразу имплементировать сторе, но....
источник

/

/dev/null in Go-go!
Calculon
пакеты psql/mock зачем?
замокать БД
источник

/

/dev/null in Go-go!
тесты
источник

C

Calculon in Go-go!
/dev/null
замокать БД
Ну типо в них один файл
источник

C

Calculon in Go-go!
Можно кинуть в стор
источник

C

Calculon in Go-go!
Не придется в папочки лезть глубоко))
источник

/

/dev/null in Go-go!
Calculon
Можно кинуть в стор
ну да... спасибо кстати)
источник

/

/dev/null in Go-go!
не подумал про это
источник

/

/dev/null in Go-go!
Хотя это может вызвать некоторую неоднозначность
источник

IK

Ilya Kaznacheev in Go-go!
У меня тоже моки в отдельных папках, это удобнее
источник

IK

Ilya Kaznacheev in Go-go!
Всегда в импорте видно и линтер можно настроить проще
источник

IK

Ilya Kaznacheev in Go-go!
Чтобы игнорировал кодген
источник