
Никита
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

Michael
17.02.2018
08:40:43

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

xPushkin
17.02.2018
08:45:47

Александр
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

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

Daniel
17.02.2018
08:50:29

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

Daniel
17.02.2018
08:50:48

Savely
17.02.2018
08:51:10

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

Daniel
17.02.2018
08:57:41

Savely
17.02.2018
08:57:53
100%
Тулза от того же автора лежит на гитхабе
Но она на питоне

Александр
17.02.2018
08:58:25

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

Savely
17.02.2018
08:58:38

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

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

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

Александр
17.02.2018
09:01:50

Arch
17.02.2018
09:01:52

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

Admin
ERROR: S client not available

Никита
17.02.2018
09:02:11

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

Александр
17.02.2018
09:02:16

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

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

Daniel
17.02.2018
09:07:13


Savely
17.02.2018
09:07:17

Daniel
17.02.2018
09:08:12

Savely
17.02.2018
09:08:44

Arch
17.02.2018
09:08:49

Savely
17.02.2018
09:10:30

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

Savely
17.02.2018
09:12:54

Daniel
17.02.2018
09:13:25