Ошибки в приложениях неизбежны, но мы можем их смягчить и упростить отладку. В Go ошибка — это значения, это великая сила, но мы должны знать, как ее использовать.
Я хочу кратко перечислить типы ошибок (sentinel, выделенный тип для ошибок и opaque). Затем я покажу, какие и когда их следует использовать.
После этого я хочу поговорить о wrapping (оборачивании), которое позволяет получить stack trace и место, где произошла ошибка. Также wrapping дает возможность получить данные для повторения ошибки, разделить общедоступные и частные сообщения об ошибках для логирования и ответа клиента. Расскажу и о других возможностях wrapping.
Наконец, рассмотрим ошибки + wrapping, чтобы построить централизованную обработку ошибок на примере клиент-серверного приложения и воркеров, и сравним это с обработкой ошибок по месту их возникновения.