Daniel
вернуть признак наличия ошибки и строку для пользователя.
телеграмма "вася еб твою мать подробности письмом"
Мерль
давай конкретную задачу
твой запрос поднимает виртуалки с чем-то тяжёлым первый фейл: у тебя некоторые из виртуалок не поднялись из-за недостатка ресурсов второй — у тебя разрыв сетки третий — у тебя невалидный формат запроса (запрос сложный) четвёртый — у тебя нет прав на создание опредёлённых виртуалок пятый — у тебя протух токен шестой — у тебя не запущены (не подключены, не созданы) какие-то из необходимых компонет
Мерль
на части этиъ ошибок нужно просто умирать
Мерль
на части — делать ретрай
Dmitry
телеграмма "вася еб твою мать подробности письмом"
ну да. одного признака наличия ошибки недостаточно, тип ошибки тоже нужен, но вот эти все поля, стектрейсы и т.д. - это "вася. у нас не сходится баланс. следуют 30000 строк баланса"
Мерль
на части — делать ретрай
на части — делать другой запрос
Dmitry
что такое тип ошибки в go?
пользовательский тип.
Daniel
у ошибки ровно один тип - error. и это интерфейс с единственным методом Error()
Cat
у ошибки ровно один тип - error. и это интерфейс с единственным методом Error()
он имеет в виду структуру, которая удовлетворяет Error
Daniel
в своем коде я прекрасно справляюсь. как сделать так, чтобы мне и снаружи приезжало информативное?
Daniel
чужие, да
Daniel
от сторонних либ
Мерль
это только изменив stdlib, да (
Daniel
ну и наружу мои ошибки отдать тоже было бы неплохо более внятным способом
Daniel
это только изменив stdlib, да (
иногда чешутся руки :)
Мерль
иногда чешутся руки :)
так и препроцессор не долго добавить в компилятор
Мерль
твои действия?
Мерль
а теперь часть этих ошибок прилетает к тебе по сети, но не от твоих сервисов твои действия?
Мерль
а теперь часть этих ошибок прилетает к тебе по сети, но не от твоих сервисов и чатсь из них тебе нужно отдать на фронт, но нужна ещё интернационализация твои действия?
Daniel
так и препроцессор не долго добавить в компилятор
@kirilldanshin , ты впиливал препроцессор?
Мерль
а теперь часть этих ошибок прилетает к тебе по сети, но не от твоих сервисов и чатсь из них тебе нужно отдать на фронт, но нужна ещё интернационализация твои действия?
а теперь часть этих ошибок прилетает к тебе по сети, но не от твоих сервисов и часть из них тебе нужно отдать на фронт, но нужна ещё интернационализация, а ещё у тебя не 5 ошибок, а 105 ошибок
Мерль
твои действия?
Daniel
если серезно, то впилить параметрические типы - сложная задача, я не берусь. а вот поправить описание интерфейса error, реализацию errors.New() и fmt.Errorf() - это легко
Мерль
а теперь часть этих ошибок прилетает к тебе по сети, но не от твоих сервисов и часть из них тебе нужно отдать на фронт, но нужна ещё интернационализация, а ещё у тебя не 5 ошибок, а 105 ошибок, а ещё у тебя пользователь может создавать кастомные квери, и не пользователь тоже твои действия?
Мерль
примерно на третьем шаге ты начинаешь сходить с ума, если что
Cat
ты мой кумир
Dmitry
ну тут архитектура пиздец
Dmitry
все в одну кучу навалено
Мерль
ну тут архитектура пиздец
то есть любая сложнее CRUD добро пожаловать в реальный мир
Kirill
Что тут за ад и израиль
Cat
все в одну кучу навалено
а как предложишь?
Dmitry
реальный мир говнокода ?
Dmitry
а как предложишь?
предлагаю сесть и отрефакторить это гавно
Daniel
код всегда говнокод
Мерль
предлагаю сесть и отрефакторить это гавно
каким образом? я выслушаю предложения )
Kirill
код всегда говнокод
А к чему вопрос был?
Dmitry
Daniel
Что тут за ад и израиль
да тут с утра движуха. даже с вечера. в соседнем чате тоже. началось все с вопроса "хорош ли go в качестве самого первого языка", дальше кто-то выкрикнул "генерики", и понеслась
Dmitry
ну какие у меня могут быть предложения на рефакторинг абстрактного говнокода ? сесть и написать асбтрактный код отвечающий ооп принципам
Cat
так а почему он говно?
Daniel
ооп - это хорошо, что ли?
Cat
так а почему он говно?
куда кидать ошибки, если у тебя есть rest-сервис?
Dmitry
ооп это не серебряная пуля, но лучше пока не придумали
Cat
ооп это не серебряная пуля, но лучше пока не придумали
придумали не использовать наследование => это уже не ооп
Dmitry
придумали не использовать наследование => это уже не ооп
с чего же - композиция это тоже часть ооп
Daniel
Ох ё... Даже недельку-две не поболеть, сразу срачи А препроцессор тут при чём?
препроцессор как пример того, до чего можно дойти, если начать форкать язык
Мерль
ну какие у меня могут быть предложения на рефакторинг абстрактного говнокода ? сесть и написать асбтрактный код отвечающий ооп принципам
причём тут ООП? мне кажется ты не очень понимаешь что ты говоришь, извини если у тебя есть какая-то бизнес логика, то у тебе нужно как-то работать с ошибками сложнее чем "записать в лог и умереть"
Мерль
хоть десять раз у тебя DRY и по заветам всех семи томов "Программируем интерпрайз системы с оглядкой на ITIL"
Cat
с чего же - композиция это тоже часть ооп
воу воу, ты попроще с такими заявлениями
Kirill
препроцессор как пример того, до чего можно дойти, если начать форкать язык
Не лучший пример У меня есть сейчас три ветки компилятора. Один на go, один на c++ и вот он - твой пример на все случаи жизни - один на js
Cat
я говорю о том что детали реализации не должны отдаваться наружу.
это не про ооп как таковой, это инкапсуляция
Cat
инкапсуляция может существовать независимо от ООП
Dmitry
да, но входит в основологающие принципы ооп
Cat
и что? ООП не существует без инкапсуляции, но не наоборот как ООП не существует без наследования
Мерль
я говорю о том что детали реализации не должны отдаваться наружу.
а при чём тут детали реализации? пользователь отправил форму, ему пришло сообщение, в котором содержится информация о невалидном поле это внутренняя реализация?
Мерль
в каком месте? это внешний контракт
Мерль
А не паника в логах, потому что пользователь - дурак :))
не, ну отвечать 500 на любой чих — в этом есть своя прелесть конечно ))
Dmitry
Кто сказал? 🙃
дяди умные