@gogolang

Страница 521 из 1630
Axm
21.09.2017
15:45:42
а как надо?

скажите еще, как отделить тест от пакета? чтобы переменные внутри тестов не были доступны пакету остальному. ну или как передать из TestMain нужные значения внутрь тестовых методов, не делая их глобальными?

Google
Axm
21.09.2017
15:50:36
еще разверни для понимания связанности пакетов
что непонятно? я не знаю куда развернуть надо.

Aleksandr
21.09.2017
15:51:28
что непонятно? я не знаю куда развернуть надо.
непонятна степень связанности пакетов. я же написал: правильное решение зависит от контекста. пакет зависит от другого пакета - это не контекст.

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

package A type Client1 struct type Client2 interface type Client2BDecorator struct package B type Client2 struct type Client1 interface type Client1ADecorator struct

in favor
21.09.2017
15:55:51
Интересно

Aleksandr
21.09.2017
15:55:53
декораторы реализуют интерфейсы своего пакета, декорируя клиентов из другого пакета

Axm
21.09.2017
15:56:06
не, мне так сложно сейчас не надо, это будет слишком

Aleksandr
21.09.2017
15:56:19
это в полной парадигме clean arch но этого слишком много для связанных систем

Axm
21.09.2017
15:57:19
в данный момент у меня один пакет (клиент) вызывает по ходу работы метод другого пакета (клиента). то есть, запрашивает данные в другой системе.

и так в нескольких местах

Aleksandr
21.09.2017
15:59:05
положи интерфейс рядом с реализацией в каждом пакете

package A type Client interface type BaseClient struct package B type Client interface type BaseClient struct

Google
Aleksandr
21.09.2017
16:00:37
если вообще тебе интерфейсы нужны

Axm
21.09.2017
16:01:02
нужны, надо тестировать, а для этого мокать

спасибо

Мерлин
21.09.2017
17:54:53
Sapir-Whorf on Programming Languages https://blog.chewxy.com/2017/09/20/sapir-whorf-programming-languages/

Aleksandr
21.09.2017
18:07:11
Я бы смотрел по обстоятельствам, не все есть смысл декорировать
я именно так и написал. в связанной системе декорация не нужна

Мерлин
21.09.2017
19:27:52
https://medium.com/@matryer/video-writing-beautiful-packages-in-go-fab1138608ee

Dion
21.09.2017
19:31:56
Чуваки, как все html тэги в строке порезать, без регулярок и strings.Replace?

Мерлин
21.09.2017
19:36:19
Чуваки, как все html тэги в строке порезать, без регулярок и strings.Replace?
Я использовал вот это https://github.com/microcosm-cc/bluemonday

Dion
21.09.2017
19:37:46
Slava
21.09.2017
19:38:20
можешь свою написать

No
21.09.2017
22:46:11
Есть желание попробовать что-то сделать серьезное, типо написать эмуляьтор под ммо игру, если это не утопическая идея, то можете подсказать соответствующую литеруту)

Quet
21.09.2017
23:07:55
a tour of go?

Pawel
22.09.2017
04:39:22
Pawel
22.09.2017
05:39:45
делаю простой DI типа того, как описано в этой статье https://appliedgo.net/di/. если у меня все в разных пакетах, то куда будет по фень-шую засунуть интерфейс? т.е. пакет А с методом М1 требует интерфейс И1. структура с методом, который его реализует, находится в пакете Б. интерфейс надо куда класть? в А, Б или третий пакет?
В статье дальше хелуворда дело не зашло. Есть мнение, что DI в гошечке - архитектурный костыль. Рудимент, привнесённый рефлесирующими джавистами, пришедшими в Го. Я не видел DI ни в одном из гайдлайнов, Мэйнтейнеры Го где-то рекомендуют DI? тоже не видел.

Pawel
22.09.2017
05:43:33
на Go DI это не нужные костыли)
я тоже так считаю. Остаётся понять на чём основаны аргументы противоположного мнения

Pawel
22.09.2017
05:47:12
Google
Valentin
22.09.2017
05:48:12
Не надо копипастить 5 раз инициализацию составной структуры

Valentin
22.09.2017
06:01:11
а конструктор не поможет?
Контейнер как раз решает проблему заполнения конструктора зависимостями

Чтобы не приходилось делать это каждый раз

Pawel
22.09.2017
06:30:19
Не надо копипастить 5 раз инициализацию составной структуры
В теории - да. Но на практике DI бесполезна и обычно ведет к усложнению кода. Ответь по возможности на несколько вопросов, не обязательно в чатике - просто для себя. — Зачем заводить кучу бесполезных интерфейсов ради DI, если за большинством таких интерфейсов на практике редко бывает более одной реализации? — Как повлиять на порядок инициализации зависимостей и аргументы, используемые при их инициализации? — Как сделать так, чтобы определенные зависимости создавались при каждом вызове функции, а другие — использовались повторно? — Какие проблемы решает DI? Стоит ли решение этих проблем добавления геморроя по вышеуказанным вопросам?

— Как узнать, когда, в каком порядке и с какими аргументами были инициализированы зависимости, использующиеся в конкретной области кода? Как это влияет на debuggability и maintainability кода?

Valentin
22.09.2017
07:18:25
Какой то узкий кейс про порядок интциализации. DI же как раз абстрагирует клиентский код от инициализации, создавая зависимости по мере необходимости

Mush
22.09.2017
07:29:23
что не день, то в этом чате гонят на общепринятый тот или иной темплейт разработки, называя его бесполезным

Pawel
22.09.2017
07:36:32
я пытаюсь придумать случай чтобы порядок инициализации не имел значения. На ум приходит в основном хелуворд. Гошечка в том числе для того и придумана, чтобы прикладной код имел полный контроль над работой системой, а не полагался на неведомую магию

Igor
22.09.2017
07:36:35
что не день, то в этом чате гонят на общепринятый тот или иной темплейт разработки, называя его бесполезным
Это потому, что они часто плохо поддерживаются в Go, и "фанатики" считают, раз данный паттерн не поддерживается, то он бесполезен по умолчанию

я пытаюсь придумать случай чтобы порядок инициализации не имел значения. На ум приходит в основном хелуворд. Гошечка в том числе для того и придумана, чтобы прикладной код имел полный контроль над работой системой, а не полагался на неведомую магию
Если порядок инициализации важен - у вас плохо написан код, с кучей сайд эффектов. Не помню ни одного случая, когда мне нужно было где то соблюдать порядок иницализации

Viktor
22.09.2017
07:39:35
Привет всем. Есть ли сревис или утилитка для генерации struct на основе json ?

Димка
22.09.2017
07:40:01
Ладно, а как писать тесты с моками?
https://github.com/golang/go/wiki/CodeReviewComments#interfaces

Pawel
22.09.2017
07:43:29
Это потому, что они часто плохо поддерживаются в Go, и "фанатики" считают, раз данный паттерн не поддерживается, то он бесполезен по умолчанию
Это потому, что в жабе и C# буквально на каждый чих требуются костыли на подобие DI . Поэтому у жабодрочеров с ООП голвного мозга происходит разрыв шаблона из-за того, что в гошече на фиг не нужно то, что в их говноязыках ситается best pratices.

Mush
22.09.2017
07:49:19
я не жабодрочер и не любитель ооп, но тоже юзаю DI в го и это удобно

Pawel
22.09.2017
07:51:10
Если порядок инициализации важен - у вас плохо написан код, с кучей сайд эффектов. Не помню ни одного случая, когда мне нужно было где то соблюдать порядок иницализации
смысл инициализации в том, чтобы произвести сайд-эффект. Как и императивного программирования вообще. Для того, чтобы понять какие эффекты и в каком порядке вызываются внутри DI контейнера, требуется доп. когнитивная нагрузка по сравнению с прямой конфигурацией зависимостей

Google
Daniel
22.09.2017
07:51:55
коллеги, остановитесь, а?

хорошего языка нам не дали еще, а плохие, хоть и прохи все по-разному, плохи одинаково

Igor
22.09.2017
07:56:02
Возможно

Pawel
22.09.2017
07:58:42
У некоторых людей како-то имхо карго-культ SOLID или ФП. Объяснять им, что любая loc на Go - это инструкция, производящая сайд-эффект, бесполезно. Рецепт инициализации объектов - это вообще ужос

Alex
22.09.2017
08:03:15
1. Я бы хотел одну функцию fileExists(), а не две 2. copy(dst, src) - ещё короче и без вопросов
Проверка зависит от ОС и фс а не языка. По юниксу проверяется открытием

Pawel
22.09.2017
08:03:36
Возможно, DI и SOLID может быть полезно в очень узкой нише, но слепое следование этим принципам на всех подряд проектах обычно ведет к бессмысленному усложнению кода и нагромождению бесполезных абстракций с визиторами по синглтонам. Почитайте на досуге https://www.sandimetz.com/blog/2016/1/20/the-wrong-abstraction https://en.wikipedia.org/wiki/KISS_principle

Axm
22.09.2017
08:05:07
Pawel
22.09.2017
08:07:13
А что это, если не DI?
не вижу каким образом DI облегчит написание тестов. разве что внесёт дополнителную путаницу когда мокается не понятно что и тестируется конь в вакууме.

Igor
22.09.2017
08:09:55
@ruzzke_mir возниакет чувство, что вы вообще не понимаете, что скрывается под буквами DI и разговор идёт о разных вещах

Lanegan
22.09.2017
08:16:37
Коллеги, хай! Начал в Go совсем недавно, решил перетащить монолит с php(вот только не надо), на микросервисы. Решил заюзать grpc для общения между сервисами. Такой вопрос, на структуры которые генерятся из protobuf можно полагаться в проекте ? Это норм, реюзать их? Или следует рассматривать эти структуры только как контейнеры для перевозки данных?

Daniel
22.09.2017
08:17:21
Только для перевозки

Не следует вносить связность туда, где без нее можно обойтись

Vasily Romanov
22.09.2017
08:18:02
Зависит от того насколько плотно ты будешь их спользовать

Daniel
22.09.2017
08:18:15
Не зависит

Vasily Romanov
22.09.2017
08:19:06
Если это микро-сервис, который получил данные из базы и выплюнул наверх - то норм Если куча-логики ещё там рядом - лучше нет

Daniel
22.09.2017
08:19:49
И мы завязали протокол и хранение намертво. Зачем?

Lanegan
22.09.2017
08:21:59
Только для перевозки
Соглашусь, спасибо!)

Google
Lanegan
22.09.2017
08:25:31
Тогда еще вопрос, чем можно копировать значения из одной структуры в другую? Писать свой метод, через рефлектор?

Daniel
22.09.2017
08:26:56
Совпадающие на 100% структуры копируются сами

Рефлектор - плохое решение

Lanegan
22.09.2017
08:27:10
Так вот если они не совпадают?

Daniel
22.09.2017
08:27:31
Или руками, или кодогенерацией

Я руками пишу

Vladislav
22.09.2017
08:28:24
Возможно можно через композицию твои проблемы решить.

Lanegan
22.09.2017
08:30:57
Унаследовать структуру которая сгенерилась из protobuf?

Самое простое решение - руками, конечно.

Daniel
22.09.2017
08:33:23
Наследовать так же плохо, как на прамую использовать

Vladislav
22.09.2017
08:35:18
Никто не мешает менять сами протобаф структуры и в них наследовать. (Ну а вообще копирование не всегда с протобаф связано). Тут нужно частный случай разбирать.

Lanegan
22.09.2017
08:41:55
Мне нужно добавить в базу строку с кучей полей(регистрация пользователя), но при этом сам протокол передает больше данных чем надо записать. Плюс для работы с базой выбрал go-pg orm(хотя теперь уже начал сомневаться, нужна ли она... laravel развращает). И тут сами руки тянутся использовать уже готовую структуру, передать в orm и вписать исключения для полей, которых нет в базе.

Но походу таки придется поработать руками. А для документации grpc есть какие-то инструменты ? Или protobuf это и есть документация ?

Kiku
22.09.2017
10:43:39
http://telegra.ph/Golang-09-20

Pawel
22.09.2017
11:24:53
@ruzzke_mir возниакет чувство, что вы вообще не понимаете, что скрывается под буквами DI и разговор идёт о разных вещах
Я его использовал когда программировал на C# в asp net mvc. Если вы считаете своё понимаени DI боле труЪшным чем моё, ответьте на заданные выше коварные вопросы в контексте вашей любимой DI системы и приведите примеры из практики, где без DI никуда. Желательно со ссылками на исходники. Подсказать, чем практика отличается от теории?

Александр
22.09.2017
11:41:14
Коллеги, использую либу ffjson (кодогенерация), есть структура допустим из 10 полей. 3 из них с тегом json:"-". Нужно уметь маршалить/анмаршалить 7 полей или 10 полей в зависимости от ситуации

Как правильно сделать это? Еще одну структуру завести с полными тегами?

Страница 521 из 1630