@proGO

Страница 1238 из 1674
Никита
17.02.2018
08:39:30
А если ты уверен в типе, то проверок не надо

Savely
17.02.2018
08:39:37
Ну зависит от проекта.

У меня буквально 2-3 структуры бывает.

Так проще.

Google
Никита
17.02.2018
08:40:30
?

Savely
17.02.2018
08:40:32
А если ты уверен в типе, то проверок не надо
Я не уверен вот в случае сверху. У меня там каждый раз может быть абсолютно что угодно.

Savely
17.02.2018
08:41:06
К счастью

Michael
17.02.2018
08:41:27
? но это не точно)))

Александр
17.02.2018
08:41:46
блеать, у меня мозги забекрень уже ?

Savely
17.02.2018
08:41:49
? но это не точно)))
Я отсекаю все обновления без типа в основном цикле, просто скипаю их.

Так что всё ок.

Александр
17.02.2018
08:43:53
Проблема: есть набор моделек и они ни заполняются из функции поиска, у каждой модельки есть фабрика которая получает запись бд и заполяет структуру. Каждая модель в своем пакете.

в функции поиска я не могу вызвать фабрику модели, ибо тогда начинаются круговые зависимости

потому что она с свою очередь тоже использует поиск для субзапросов

я хотел обойти следующим образом: сделать внутри структуры модели метод fill и в поиск скормить структуру (под видом интерфейса)

Google
Александр
17.02.2018
08:45:51
а потом в слепую у интерфейса сделать fill

Savely
17.02.2018
08:46:43
Посмотри протокол MTProto. У него весь API выполнен в таком стиле.

Это ответ @chebyrash

Александр
17.02.2018
08:47:38
но задумка не удалась, ибо fill должен тип возращаемого значения тоже должен быть интерфейсом (что бы мы в поиске не упоминали его пакет)

а если я уже в реализации попытаюсь вернуть new(Struct) на ссылочный тип интерфейса получу кукишь

func (p DataModel) Fill(entity *anyType) *Interface { return &DataModel{} }

если вернуть func (p DataModel) Fill(entity *anyType) *DataModel { return &DataModel{} } то он уже при накормки поиска будет орать что типо "общали там интерфейс"

Daniel
17.02.2018
08:50:03
Ну да, нужно было нагенерить 18 тысяч строк кода.
вот прям 18 тысяч? или это, гм, преувеличение?

Savely
17.02.2018
08:50:11
Скорее всего даже больше.

Savely
17.02.2018
08:50:47
Я бросил идею, когда понял, что там скорее всего придется ещё больше кода генерировать.

Daniel
17.02.2018
08:50:48
Скорее всего даже больше.
а что за задача такая, что вот прям 18 тысяч?

Savely
17.02.2018
08:51:10
а что за задача такая, что вот прям 18 тысяч?
Высокоуровневая обертка для MTProto.

Daniel
17.02.2018
08:51:50
там нет кода на 18К строк

или вы, коллега, привираете, или вы не сумели задачу осознать

Savely
17.02.2018
08:52:40
там нет кода на 18К строк
Да я ё-маё, ну вот глянь пример. Это не мой код, но там даже не самая последняя схема. 63 вроде, а сейчас почти 80-ая. https://github.com/shelomentsevd/mtproto/blob/master/api.go

Если на 80-ые лейеры сделать, будет все 25к

Александр
17.02.2018
08:55:28
в гоу полная боль блин ?

Google
Александр
17.02.2018
08:55:42
не возможно структуировать в обертку ничего

как только начинаешь плодить обертки-ар все капец

а без них код хендлеров это полный трешь на 300 строк

причем копипастом в 7 местах (по числу хендлеров)

хотел сделать худые хендлеры, основной код вынести в библиотеки, сделать модели

Arch
17.02.2018
08:57:28
причем копипастом в 7 местах (по числу хендлеров)
так выносите копипасту в отдельную функцию и юзайте ее

Savely
17.02.2018
08:57:53
100%

Тулза от того же автора лежит на гитхабе

Но она на питоне

Александр
17.02.2018
08:58:25
так выносите копипасту в отдельную функцию и юзайте ее
не выйдет, код то разный. Просто открыть бд, прочитать, закрыть записать

Александр
17.02.2018
08:58:27
это уже 50 строк

вот это все говно и ездит

Arch
17.02.2018
08:59:09
не выйдет, код то разный. Просто открыть бд, прочитать, закрыть записать
так делайте либу с логикой бд и потом с глобального уровня ее юзайте

Daniel
17.02.2018
08:59:19
это понятно, никто в один файл 22К строк не сложит из людей. но я не про собственно гошные строки, а про логику. она там не шаблонная

Александр
17.02.2018
08:59:22
если делать обертку, она должна вызывать другую обретку которая "по месту"

а там начинаются циклические зависимости

поиск -> нашел модель -> модель дернула поиска -> не скомпилилось

Google
Savely
17.02.2018
09:00:18
это понятно, никто в один файл 22К строк не сложит из людей. но я не про собственно гошные строки, а про логику. она там не шаблонная
Потому что Golang для реализации MTProto слабо подходит. Там TL-схемы полагаются на классы. Это... гхм... Вызывает некоторые сложности.

Александр
17.02.2018
09:00:44
ага, циклические то запрещены

начинаешь плодить огород из интерфейсов

Daniel
17.02.2018
09:01:00
я к тому, что эти строки кода так или иначе должны быть на любом языке написаны

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

Arch
17.02.2018
09:01:52
начинаешь плодить огород из интерфейсов
Ну согласен, чтобы писать на го надо мыслить не стандартными паттернами программирования как на с# или питоне

Александр
17.02.2018
09:01:54
только вы пропустили

Admin
ERROR: S client not available

Daniel
17.02.2018
09:02:14
я сознательно пробустил

Daniel
17.02.2018
09:02:46
и что?

Александр
17.02.2018
09:02:58
и ничего, решение уже нет неделю сижу с этим

Daniel
17.02.2018
09:03:06
да почему нет-то?

Александр
17.02.2018
09:03:12
ну а как?

Savely
17.02.2018
09:03:57
я к тому, что эти строки кода так или иначе должны быть на любом языке написаны
Ну вот пример из TL-схемы TDLib (там упрощеннеые используются): //@class AuthorizationState @description Represents the current authorization state of the client //@description TDLib needs TdlibParameters for initialization authorizationStateWaitTdlibParameters = AuthorizationState; //@description TDLib needs an encryption key to decrypt the local database @is_encrypted True, if the database is currently encrypted authorizationStateWaitEncryptionKey is_encrypted:Bool = AuthorizationState; //@description TDLib needs the user's phone number to authorize authorizationStateWaitPhoneNumber = AuthorizationState; Другими словами в ответе приходит не тип AuthorizationState, а его "подтип" из класса типов. И так выглядит весь MTProto. Нужно древовидно парсить ответ, спускаясь всё ниже, определяя вложенные типы. Ответ всегда может быть разным. У него нет какой-то определенной структуры. Поэтом без type assertion практически невозможно сделать.

Daniel
17.02.2018
09:03:59
описали ваши модельки в yml, написали генератор кода - и понеслась. да, у этого подхода есть сложности. но - это путь и он рабочий.

Александр
17.02.2018
09:04:16
main -> handler -> search -> user -> core -> search -> core

один из вариантов тупика

Google
Александр
17.02.2018
09:05:32
у меня родился план, как не инклюдить в поиске user, но он тоже провалился достаточно

(через интерфейсы - кормим в поиск структуру пользователя, далее делаем вид в поиске что работае с интерфейсом)

Arch
17.02.2018
09:06:50
описали ваши модельки в yml, написали генератор кода - и понеслась. да, у этого подхода есть сложности. но - это путь и он рабочий.
А раньше все кричали про ооп, паттерны переиспользования кода, а теперь кодо генератор и копипаста, мода однако)))))

Александр
17.02.2018
09:07:02
еще и база не реалиционная

Daniel
17.02.2018
09:08:12
А раньше все кричали про ооп, паттерны переиспользования кода, а теперь кодо генератор и копипаста, мода однако)))))
с одной стороны мода, а с другой - что с++, что жаба родили нам таких монстров, что хочется от ооп уйти подальше

Savely
17.02.2018
09:08:44
при чем тут type assertion? к вам приехал пакет, вы его распарсили. тип его при этом выяснился однозначно. зачем assertion?
Потому что я не знаю как описать объект детерминированной структурой. Условный тип FileInput может появиться как в глубине объекта, так и прям в самом корне. Может, я конечно, чего-то не понимаю...

Arch
17.02.2018
09:08:49
По идее кодеген это решение в пользу скорости.
В случае если компилятор сможет что-то оптимизировать в вашем коде, в противном случае это приведет только к увеличению бинарника

Daniel
17.02.2018
09:10:35
так, коллеги, разговор интересный, но мне надо сбежать. я ближе к вечеру попробую его взобновить. ок?

Savely
17.02.2018
09:10:54
Короче были бы генерики, было бы легче))0

Daniel
17.02.2018
09:11:11
Savely
17.02.2018
09:11:14
Я прекрасно осознаю, что в 90% случаев можно обойтись без них.

Но конкретно в моем кейсе они бы не помешали.

Arch
17.02.2018
09:11:28
с одной стороны мода, а с другой - что с++, что жаба родили нам таких монстров, что хочется от ооп уйти подальше
Почему? Если нормально написано, то в большинстве случаев вполне читаемо и разбираемо и комментарии с интерфейсами никто не отменял

Savely
17.02.2018
09:11:58
вот не уверен. с чего бы?
Ну когда вернешься, стукни реплаем, может получиться объяснить полностью ситуацию.

Arch
17.02.2018
09:12:10
Я прекрасно осознаю, что в 90% случаев можно обойтись без них.
+ но с ними становится в этих 90% намного легче))))

Savely
17.02.2018
09:12:54
+ но с ними становится в этих 90% намного легче))))
Я думаю разработчики Go сделают какие-то особенные хитровыебанные дженерики, которые не дженерики вовсе, но помогут решать такие кейсы.

Страница 1238 из 1674