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

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

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

37 ответов

24 просмотра

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
вопрос: за-чем?

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта