Vladislav
fmt.Errorf("some shit happened at %s: %w", loc, err)
Кіт ✙
а если у меня в тексте ошибки форматируется какая-то величина?
вот этот момент я и хотел узнать пока, если я правильно понимаю, это можно решить разве что через кастомные объекты ошибок, соответствующих интерфейсу error
Кіт ✙
мы ведь не хотим хардкодить обработчики?
Grigory
Что значит хардкодить обработчики? Вот тебе приходит запрос Ты читаешь первую строчку, доходишь до пути запроса Дальше по нему определяешь обработчик Из него получаешь ответ или ошибку Если не получаешь обработчик - выдаёшь 400/405
Grigory
В какой момент тут Мапа ошибка->обработчик появляется?
Кіт ✙
допустим, сейчас это выглядит вот так
Vladislav
а эти ошибки - это ошибки из какого кода?
Vladislav
из твоего или пользовательского?
Кіт ✙
моего
Кіт ✙
обработчики не возвращают ошибки
Кіт ✙
предполагается, что все ошибки обрабатываются там же на месте, возвращается только types.Response
Vladislav
тогда не понимаю, зачем тебе нужна мапа, чтобы для какой-то ошибки вызвать обработчик?
Grigory
А какие ошибки ты так обрабатывать собрался?
Кіт ✙
тогда не понимаю, зачем тебе нужна мапа, чтобы для какой-то ошибки вызвать обработчик?
ну например, мы хотим добавить свою страничку для 404. Вместо того, чтобы как-то пытаться страничку по-умолчанию переопределить, мы накидываем свой обработчик для этой ошибки
Кіт ✙
ну, и то же про 405 method not allowed
Кіт ✙
а там ещё и из ядра могут ошибки прилетать, тоже хорошо было бы иметь возможность собственноручно их обрабатывать
Кіт ✙
Звучит как мапа по коду ответа 🙃
ну, 404 может и обычный обработчик отдать
Кіт ✙
мы же не хотим обрабатывать ошибку, которую уже обработали?
Grigory
ну, 404 может и обычный обработчик отдать
Ну и не пускай в эту мапу ответы хендлеров
Кіт ✙
ну допустим, а каким кодом выразить ErrConnectionClose?
Vladislav
но я правда прикола не понял, почему кони и люди смешались
Vladislav
почему серверу не похуй на ошибки какие-то
Vladislav
это всё дело пользовательского кода
Кіт ✙
444, например (nginx)
спасибо, сделаю таки на кодах. Вы правы, так действительно красивше
Vladislav
скажем, я юзаю обычный net/http и никакие мапы не заполняю
Кіт ✙
это всё дело пользовательского кода
ну так. Я и выношу возможность обработки этих ошибок пользователю
Кіт ✙
если не надо - значит, не надо. Обработчики по умолчанию отдадут нечто такое
Grigory
ну допустим, а каким кодом выразить ErrConnectionClose?
Просто залогировать, ты больше с ним ничего сделать не сможешь
Кіт ✙
Просто залогировать, ты больше с ним ничего сделать не сможешь
но ведь пользовательский код теоретически всё же надо уведомить о подобных штуках
Кіт ✙
но ведь пользовательский код теоретически всё же надо уведомить о подобных штуках
хотя вот с ErrConnectionClose сомнительно. Либо ловим на этапе парсинга запроса, и обработчик всё равно ещё не вызван, можно просто забыть об этом инциденте. Либо когда читаем тело, но тогда эта ошибка возвращается прямо в обработчик. Либо когда пользователь тело не прочитал, а забил на него, но тогда мы опять же можем забыть об этом
Кіт ✙
Он на попытке ответить это получит
обработчик сам не отвечает на запрос
Кіт ✙
возвращается конструктор ответа, роутер из него рендерит сам ответ
Кіт ✙
сделано с заделом на миддлвари
Grigory
Имхо, на такие кейсы обработчики не нужны, ты с этой ошибкой ничего сделать не сможешь, максимум в метрике посчитать сколько их происходит, да и то - бесполезно
Grigory
Смысл роутера же в том, чтоб не заморачиваться с сетью и просто пилить бизнес логику
Ольга
Ищем senior Go developer-а! ЗП: до 300.000 руб Вакансия открыта в компании Adsensor https://adsensor.ru/ AdSensor — это платформа, которая каждый день сканирует рекламные кабинеты. Система ежедневно мониторит рекламу, оценивает ее качество и эффективность расходов бюджета. Клиенты: Askona, Совкомбанк, Ozon, Splat и др. 📌Кого мы ищем: - Опытный разработчик от 6 лет, Golang от 2 лет Стек: ⁃ Golang ⁃ Faktory ⁃ Dbr ⁃ Goose ⁃ Postgresql ⁃ Тесты: testify + gomock ⁃ CI через cirleci ⁃ GitHub + git flow ⁃ Без Docker и K8. Чистые бинари и Ansible ⁃ Вспомогательные сервисы: Python + Docker 🔷Будет "+": - Опыт из рекламной области, знать доменные области рекламы (представление структуры аккаунта, структуры сущности); - Опыт работы с API Google Ads/Yandex Direct/FB/VK ads (написание проверок, которые анализируют качество настройки) - Опыт промышленной разработки на Python 📍Что будите делать: - Реализовывать новые проверки для контекстной рекламы. Хотим сильно увеличить количество проверяемых параметров для контекстной рекламы и сделать базовые проверки для таргетированой рекламы. - Ближайшие задачи перед командой: У нас есть стабильный поток ручных продаж . Следующая цель: 1000 MAU. Для этого нужно научиться доносить ценность продукта через интерфейс и продавать в интерфейсе. 🔗С нас: ✅оформление по ТК РФ; ✅полностью удаленный формат работы; ✅график работы 5/2 (гибкое начало дня); ✅ ЗП до 300 000 руб. (30% белая часть); ✅оплачиваемое обучение сотрудников Для связи @flamehost0604
Кіт ✙
Имхо, на такие кейсы обработчики не нужны, ты с этой ошибкой ничего сделать не сможешь, максимум в метрике посчитать сколько их происходит, да и то - бесполезно
ну так. В случае чего - кастомизировать поведение. Если не надо - значит, ничего не делай, ответы по-умолчанию будут возвращены
Кіт ✙
куда лучше, нежели вовсе отобрать такую возможность
Илья
имхо, какой-то python style
Кіт ✙
имхо, какой-то python style
да, перенял это из питона, там обычно их так и делают. А почему плохо?
Илья
длинные чейны нормально выглядят в каких-то тестах, гошка их плохо форматирует
Кіт ✙
а есть ли вообще юзкейс у манипуляций с ответом после завершения обработчика?
Кіт ✙
потому что я так подумал, и что-то вроде как не видно, чтобы это как-либо адекватно можно было использовать
Кіт ✙
ну если мидлвари не предусмотрены, то нет
ну опять же, вся эта муть с конструктором ответа сделана суто ради миддлварей
Кіт ✙
фастхттп такого функционала, например, не предоставляет. Вот я и подумал, а нужно ли оно вообще
Vladislav
хз, я думал вообще вся затея выросла из какой-то конкретной сформировавшейся необходимости
kostyaBro
https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/
Кіт ✙
как выглядят анонимные функции с точки зрения исполняемого кода? Во что они генерируются, как обрабатываются? Насколько дорого в горячем участке кода передавать анонимную функцию аргументом функции?
kostyaBro
Бесплатно, грубо говоря
kostyaBro
Вчера на и записи с конференции видел
Maks
https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/
Ддд вообще жутко тяжелая хрень для старта проекта. Первая проектировка очень долгая и дорогая
Maks
Лучше день потерять потом за 5 могут долететь
Ну там не день, там реально много времени уходит. Ты же не можешь без доменного спеца спроектировать ничего. Ты не бизнес. Его работа это тоже проектирование ддд по сути будет. Пока он все распишет, пока вы обсудите, и так далее. Это даже не неделя на его работу
Maks
Ну прежде чем добавлять нужно начать ддд делать. А что бы начать - бизнес должен описать предметную область грамотно. Я сталкивался с ДДД и это было недоДДД. И такое часто слышу.
Кіт ✙
kostyaBro
Опа, спасибо
https://youtu.be/8UESXMJwTpc
kostyaBro
Тут про unsafe ничего почти не сказано, но лично я тоже его очень люблю.
anhckie
Тут про unsafe ничего почти не сказано, но лично я тоже его очень люблю.
а что можно сказать про unsafe? встречался с ним визуально, не более. в двух словах, если можн)
Кіт ✙
а что можно сказать про unsafe? встречался с ним визуально, не более. в двух словах, если можн)
надежда на то, что переход на другую версию не сломает всё к херам по непонятной причине
Кіт ✙
https://youtu.be/8UESXMJwTpc
спасибо большое!
kostyaBro
а что можно сказать про unsafe? встречался с ним визуально, не более. в двух словах, если можн)
Ну это шустрый каст данных если уметь. К примеру каст байт в строку в 30 раз быстрее. Можно мутейтить приватные поля если очень надо. Да по-сути обычная арифметика указателей.
Кіт ✙
С чего вдруг арифметика указателей сломается.
а кто сказал, что сломается арифметика указателей
Кіт ✙
сломается то, что работает с арифметикой указателей
kostyaBro
Есть случаи когда для снятия нагрузки с gc алоцироыали массив байт огромный и сами там делали что надо
kostyaBro
fast http весь на них работает