170 похожих чатов

Привет. Чуть вкатываюсь в го. Есть вопросы. 1. В джанго-мире есть

сериализаторы и валидаторы. Как без бойлерплейта кастить url query string в го-типы? Хорошо ли то, чтобы url qs загонять в структуру?
2. В питон-мире есть очередь задач и celery. Что есть в го? Как распрелелять тяжелые задачки по воркерам? Rabbitmq тут вообше к месту будет?

37 ответов

20 просмотров

1. это не кастинг, это парсинг 2. что ещё за тяжёлые задачки?

𝖁𝖎𝖙𝖆𝖑𝖎𝖞 𝕾
Cpu-затратные

для этого у нас горутины

Roman Sharkov
для этого у нас горутины

ну celery еще позволяет получить статус таски, перезапускать и тд

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
для этого у нас горутины

Дык это стейтфул. Если главный процесс того же веб-сервиса дохнет (kill), то дохнут и потоки. По логике надо разделить ответственность между приёмом “заявки” на вычисление и самими вычислениями. Это гуд делается через очереди. Грубо говоря, вычисление задачи занимает минуту. web-клиент не будет ждать минуту. Но он может придти позднее за результатом… Как-то такй

В го есть похожая на celery штука https://github.com/RichardKnop/machinery

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
1. это не кастинг, это парсинг 2. что ещё за тяжёл...

1. Парсинг да (назовём десериализацией), но ещё нужно: демаршализация и валидация.

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
это делается в Parse

Есть 2 Query param: start-date | end-date Парсим по маске 2006-01-01, тут ясно. Красивее пока не нашёл. Валидация (псеводкод): * start-date < end-date * ! end-date > now * ! start-date > now - 1 day Куда по коду лучше помещать эти правила валидации пары значений. Сделать структуру типа DateRange и сделать к структуре функцию DateRange.Validate()? Или есть хорошие места, куда можно класть валидаторы? Имеется в виду http web server, ванильный сервер.

𝖁𝖎𝖙𝖆𝖑𝖎𝖞 𝕾
Есть 2 Query param: start-date | end-date Парсим п...

ну можно конечно и func (DateRange) Validate(timeNow time.Time) error

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
в обработчик запроса

Ох, такиж спагетти. Цепочка длинная. main -> handler -> parse QS |> parse Date |> validateDateRange -> validate end-date |> validate range |> validate start-date Пардон за обозначения -> — это цепь вызовов по коллтрейсу |> — это последовательные вызовы

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
ну можно конечно и func (DateRange) Validate(timeN...

этого я боялся увидеть / услышать…

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
это делается в Parse

Попробую, спасибо!

𝖁𝖎𝖙𝖆𝖑𝖎𝖞 𝕾
Ох, такиж спагетти. Цепочка длинная. main -> handl...

ничего не понял почему спагетти то? 1. парсим URL 2. парсим start date 3. парсим end date 4. валидируем date range

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
почему?))

Страдает responsibility структуры как таковой. Задача структуры — инкапсуляция примитивных типов. Я на сокрытие данных структуры не уповаю (а некоторые могут и геттеры-сеттеры писать к структурам), но это что, получается, что я могу к структуре пририсовать мешанину методов разного уровня ответственности? И бизнес-валидация, и валидация данных? Эти привязки методов к структуре, конечно, хорошо… Но это ведь большие степени свободы гомнокодить (пардон)...

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
ничего не понял почему спагетти то? 1. парсим UR...

Возможно, у меня джанго мозга. Надеюсь, лечится. Мне стыдно =)

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
func ValidateDateRange(start, end time.Time, now t...

Да, так и сделал. timenow может вынести из параметров? (хотя, зависит от задач и логики)

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
не стоит выносить, тестинг облегчает

До тестинга не дошёл. А есть глобальные моки time.Now()?

𝖁𝖎𝖙𝖆𝖑𝖎𝖞 𝕾
До тестинга не дошёл. А есть глобальные моки time....

зачем вам глобальные моки, если можно просто сказать функции какое сейчас время? Зачем усложнять?)

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
зачем вам глобальные моки, если можно просто сказа...

Жесть. Совсем другой мир. =))) Спасибо! >Зачем усложнять?) облегчение сигнатуры функции

𝖁𝖎𝖙𝖆𝖑𝖎𝖞 𝕾
Жесть. Совсем другой мир. =))) Спасибо! >Зачем ус...

облегчение сигнатуры функции засчёт усложнения всего))) невыгодный размен

Roman Sharkov
облегчение сигнатуры функции засчёт усложнения все...

усложнения тестов или глобального стейта

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
облегчение сигнатуры функции засчёт усложнения все...

меня сейчас убьют? А что если создавать “контекст,” куда инъекцировать, например, текущее время реквеста на веб-сервисе, например? И эту жирную махину передавать в функции? 😱 Пардон, думаю, что бред.

𝖁𝖎𝖙𝖆𝖑𝖎𝖞-𝕾 Автор вопроса
Roman Sharkov
вопрос: за-чем?

Ну облегчение сигнатур.

Похожие вопросы

Обсуждают сегодня

Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
48
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
а проверьте, собирается ли у кого сейчас транк лазаря через делюкс? у меня вот: fpcupdeluxe: info: Lazarus Native Installer (BuildModuleCustom: UserIDE): LazBuild: building Us...
Iluha Companets
20
Мне тут приспичило встроить в программу форматировние текста SQL, расставить переносы строк и отступы так, чтобы лучше читалось. Я что-то свое изобразил, оно после ключевых сл...
Sergey Bodrov
11
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
добрый день. возможно ли изменить цвет окон лазаруса? Как?
Budemposmotret
35
Господа, а кто-нибудь сталкивался с размещением на TTabControl/TTabSheet множества контролов (> 100) с последующими External: Access violation? Вот буквально на ровном месте. ...
Dmitry
29
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Добрый день. Опять снова хочу обратиться к вам за помощью. После создания проэкта stack new, lazy.nvim + nvim-lspconfig/haskell-tools + hlint, ormolu из mason + hls из ghcup ...
Nannk
8
Does anyone have some zeroday's left?
Wito!d ♥️🩷
44
Карта сайта