Mike
оставаться спокойным
Mike
и разруливать ошибками
Mike
не поняла либа — аналог 422
Мерль
Например если у вас конструктор какой-нибудь коллекции и вы принимаете на входе размер для преаллокации, то в случае, если он меньше нуля, нужно падать (хотя в данном случае я бы использовал uint)
Mike
падать вообще хуево
Mike
а что если у тебя несколько параллельных клиентов?
Ivan
например - вам в либу на вход приехало нечто, чего вы не ждали совсем.
ну вот это подстава. Ты берешь чью-то либу, что-то ей передаешь (может и неправильно), а она вместо того. чтобы вернуть ошибку, крашит все. Не надо так делать.
Daniel
panic - плохое название, да :) suicide был бы лучше
Daniel
а что если у тебя несколько параллельных клиентов?
если у тебя несколько параллельных клиентов - родина дала тебе recover
Mike
если у тебя несколько параллельных клиентов - родина дала тебе recover
если у тебя паника — родина дала тебе психолога
Anonymous
Не goway же!
Daniel
ну смотри
Daniel
что делать, если тебе file.Close() вернул ошибку? скорее всего, это означает, что все плохо, и лучше не станет
Daniel
а рестарт приложения может и помочь
Anonymous
Michael
либа возвращает ошибки, прикладной код сам решает падать или нет
Michael
в чём вопрос?
Ivan
нет, ну понятно, что на топ левеле обернешь recover-ом все от чудиков, которые паники кидают, но все равно не надо их кидать без дела.
Мерль
Естественно, обрабатывать ошибку, а не перезапускать приложение.
Понимаешь, в случае если тобой самим неправильно инициализирована структура например, то ты всё равно скорее всего примешь решение упасть. Потому что это скорее всего значит, что у тебя ошибка в коде
Michael
нафик таких чудиков
Ivan
Понимаешь, в случае если тобой самим неправильно инициализирована структура например, то ты всё равно скорее всего примешь решение упасть. Потому что это скорее всего значит, что у тебя ошибка в коде
ну на старте/инициализации милое дело упасть. Но падать где-то "по середине", когда сервис зашел в ротацию и обслуживаются запросы - это плохо.
Ivan
начни писать в логи, на графики, что что-то не можешь обслужить, пусть мониторщики среагируют и натравят уже ответственных ,кто разберется, почему эти запросы не успешно отрабатывают.
Daniel
да почему же? плохо падать на тех ошибках, которые можно обработать. а на ошибках, которые обработать нельзя - падать хорошо и правильно
Anonymous
и как же именно эту ошибку обработать?
Вернуть error "не удалось закрыть файл".
Daniel
и дальше-то что?
Ivan
и это может быть зависеть от бизнес логики
Ivan
Если у тебя цель приложения записать один файлик и выйти, то да, по close можно и упасть
Anonymous
Дальше тот, кто юзает твою либу, уже сам решает, что делать. Если файл важен - вывести сообщение юзеру/отправить админу e-mail. Файл не важен - игнорировать.
Daniel
Close очень редко возвращает ошибки
Мерль
ну на старте/инициализации милое дело упасть. Но падать где-то "по середине", когда сервис зашел в ротацию и обслуживаются запросы - это плохо.
Пример из стандартной библиотеки: если ты попробуешь разблокировать разлоченный мьютекс, то программа упадёт(причём без возможности восстановления) И это правильно, потому что это показывает, что у тебя фундаментальная ошибка в коде
Daniel
практически никогда
Ivan
а есть у тебя приложение принимает файлики от клиентов и куда-то их пишет, то странно падать, если что-то пошло не так.
Daniel
но если он ее все-таки вернул - что-то пошло очень сильно не так
Anonymous
но если он ее все-таки вернул - что-то пошло очень сильно не так
Решает ли в таком случае перезапуск программы по панике? Сомневаюсь.
Мерль
Проверять входящие данные на корректность, думаю это правильно.
Проверять данные, которые ты сам же захардкодил? Как ты себе это представляешь, кроме как проверка внутри конструктора?
Мерль
Или надо писать для каждой сторонней библиотеки свой валидатор?
Daniel
и если "не так", то что?
Anonymous
но и продолжать работать смысла нет
Это решает тот, кто пишет package main, а не писатель либы.
Мерль
Если на входе что-то ожидаешь, проверь, что это действительно так.
Вот ты создаешь http клиент Данные вбиваешь ты сам - таймауты и т.д. Внимаение, вопрос: что делать, если ты накосячил с параметрами?
Мерль
Ты будешь всерьёз сначала писать переменные отдельно, хардкодить для них значения, писать двадцать if-ов и десять свитчей для проверки, а после этого загонять в структуру?
Anonymous
Вот ты создаешь http клиент Данные вбиваешь ты сам - таймауты и т.д. Внимаение, вопрос: что делать, если ты накосячил с параметрами?
Если параметр важен, то думаю надо иметь setter'ы, чтобы проверять, что там идёт на вход.
Мерль
В го для этого используются конструкторы
Мерль
Внутри которых выполняется валидация
Мерль
И дай угадаю, что ты сделаешь в той ветке, которая соответсвует невалидным параметрам? Правильно, упадёшь, потому что нет смысла работать с невалидными данными
Мерль
Конструктор, который принимает структуру -конфиг
Мерль
Верну error же.
Куда? И зачем? Чтобы что?
Мерль
Ты уже запорол всю логику
Мерль
На этапе написания
Anonymous
Надо пример для обсуждения, абстрактно трудно донести ))
Anonymous
Дополню также, что либа имхо не должна иметь права завершать программу (exit)
Мерль
Надо пример для обсуждения, абстрактно трудно донести ))
Пример: У тебя структура, внутри которой лежит Reader,
Мерль
Допустим, это декодер какой-нибудь
Aleksandr
Куда? И зачем? Чтобы что?
чтобы дать понять либе выше, что фабрика не отработала, и надо что-то сделать. не панику же кидать
Anonymous
Куда? И зачем? Чтобы что?
Пример - у меня несколько обработчиков в разных тредах работают. И вдруг один тред решает убить всю прогу... думаю, это плохо
Daniel
коллеги, простой пример. как известно - метоны можно вызывать на nil-ресивере
Мерль
чтобы дать понять либе выше, что фабрика не отработала, и надо что-то сделать. не панику же кидать
И выше тебе всё равно надо упасть Потому что если ты захардкодил неправильные значения - то такому коду нельзя работать
Мерль
Вообще
Мерль
В принципе
Daniel
что делать, если тебя вызвали на нил-ресивере?
Anonymous
Допустим, это декодер какой-нибудь
Декодер возвращает error "unexpected input", а не рушит весь сервак
Мерль
Finit la comedia
Мерль
Декодер возвращает error "unexpected input", а не рушит весь сервак
И что после этой ошибки делать? Только падать с ней
Мерль
Потому что это означает, что у тебя ошибка в логике программы
Мерль
Это должно быть ещё на этапе тестов
Aleksandr
И выше тебе всё равно надо упасть Потому что если ты захардкодил неправильные значения - то такому коду нельзя работать
не факт. я как разработчик либы выше знаю надо мне упасть, или обработать ошибку и выплюнуть в логи. данные на выхзод могут придти извне - не обязастельно хардкод
Anonymous
И что после этой ошибки делать? Только падать с ней
К примеру, сервак вконтакта должен падать, если я ему зашлю png, а внутри него pdf?