Мерион

@id7721855710_biz
Фото Обработка ошибок в Go через if err != nil многим не дает покоя и энтузиасты хотят это как-то изменить 👀 Вот что они предлагают: 1) Добавить конструкцию `check/handle` Похоже на классический try/catch. Каждую вызываемую функцию, проверяем специальным ключевым словом check. Если вернулась ошибка, то вызывается метод handle, где она уже обрабатывается. func run() error {     handle err { return err }       check one()     check two()     check three()       return nil } 2) Добавить try/catch Тут все как в предыдущем варианте, но часть с handle не обязательно вызывать там же где вызывали метод catch. Либо try просто пробросит ошибку на уровень выше. func run() (err error) { try(one()) try(two()) try(three()) return nil } 3) Добавить спецсимволы чтобы очистить синтаксис Тут все как в примере с try, но теперь это слово заменено восклицательным знаком func run() (err error) { one()! two()! three()! return nil } 4) Упростить if err != nil Тут предлагают ввести тернарные операторы, чтобы сократить до одной строки func run() error { return record.ID == "" ? errors.New("empty id") : nil } Либо заменить всю конструкцию if err != nil {return err} просто знаком вопроса: func run() (err error) { one()? two()? three()? return nil } И все они откланяются разработчиками языка: что-то похоже на defer, где-то появляется "магия", где-то ломается при оборачивании ошибок. В итоге создатели языка решили прекратить рассмотрение и прием любых предложений в этой области - https://go.dev/blog/error-syntax. Они подчеркивают, что ни одно из сотен предложений не получило даже близкого к единогласному одобрения сообщества. Go существует 15 лет, и любое изменение расколет сообщество на тех, кто "за" и "против". В отличие от дженериков, новым синтаксисом для ошибок пришлось бы пользоваться всем. Читать в нашем TG канале
Если у вас установлено приложение,
вы можете сразу перейти в канал