Впрочем, это лучшее из решений — даже начинающие Go-разработчики очень быстро привыкают к текущей практике
Команда разработчиков Go официально объявила, что не будет менять синтаксис обработки ошибок в языке.
После шести лет обсуждений, сотен предложений комьюнити и трех масштабных инициатив от самих авторов Go принято решение прекратить попытки — ни одна из предложенных идей не получила достаточной поддержки.
Почему это важно
Go часто критикуют за избыточную многословность в обработке ошибок. Код вроде:
x, err := call() if err != nil { return err }
становится настолько повторяющимся, что мешает восприятию логики программы. Попытки изменить это начались еще в 2018 году: сначала через check/handle
, затем через упрощенный try
, и недавно — с предложением использовать ?
, как в Rust.
Однако ни одно из решений не устраивало всех: одно было слишком сложным, другое скрывало управление потоком, третье вызывало путаницу при отладке.
Иск на $1.2 млрд: Apple обвинили в хранении порно с несовершеннолетними в iCloudtproger.ru
В каждом случае обсуждения сопровождались сотнями комментариев и сильным разногласием даже внутри команды Google Go.
Что теперь?
Разработчики решили остановить все инициативы, связанные с изменением синтаксиса ошибок, и закрыть соответствующие предложения без дальнейшего рассмотрения. Причины:
- Ни один из подходов не получил консенсуса. Новая конструкция затронула бы весь экосистемный код, в отличие от, например, дженериков.
- В Go принято правило — «один способ делать вещи». Добавление альтернатив сломало бы этот принцип.
- Большинство пользователей Go на практике привыкают к текущему подходу и не считают его критичным.
Вместо этого команда сосредоточится на улучшении стандартной библиотеки (например, функций вроде cmp.Or
) и инструментах IDE: возможно, они смогут скрывать повторы при чтении кода, не меняя сам язык.
А что с жалобами?
Ошибки продолжают занимать первое место в списке недовольств пользователей Go (после того как добавили дженерики). Но, как показала практика, не все хотят изменений ради краткости.
Особенно если это усложнит отладку или приведет к неидоматичному коду. Команда подчеркивает: они по-прежнему готовы выслушивать идеи — но не по синтаксису.
Вывод: для Go-мира все остается по-старому. Как и 15 лет назад, ошибки проверяются через if err != nil
, и так будет еще долго.