TGViewer
Merion Academy Merion Academy @it_knowledge_base · 9.01K subscribers
Post #1153 2.78K
Обработка ошибок в 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 лет, и любое изменение расколет сообщество на тех, кто "за" и "против". В отличие от дженериков, новым синтаксисом для ошибок пришлось бы пользоваться всем.

Читать в VK
Читать в Мах
  • 🔥 4
More from @it_knowledge_base
  1. Oct 12, 2026Разгадка: почему SQL-отчёт показал 4000 ₽ вместо 1000 ₽ Правильный ответ: 🔥 два JOIN созд…
  2. Oct 9, 2026Пятничная загадка: SQL-отчёт умножил выручку В таблице orders у заказа №42 сумма 1000 ₽. У…
  3. Oct 8, 2026photo post
  4. Oct 7, 2026Найти пользователей с шестью и более заказами — куда поставить условие? 🐸 SELECT user_id,…
  5. Oct 6, 2026Если запрос из Node.js зависает слишком долго, то ставим дедлайн Если проект использует вс…
  6. Oct 5, 2026Разгадка пятничного кейса 🐸 Одна из вероятных причин – в зависимости useEffect попал объе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →