Sobes.tech
Senior

Wie geht Go mit Fehlern um? Wie gibt man einen Fehler von einem externen Paket auf eine höhere Ebene weiter, ohne die internen Details offenzulegen?

sobes.tech KI

Antwort von AI

В Go ошибки представлены типом error, который является интерфейсом. Для обработки ошибок принято возвращать значение ошибки из функции и проверять его на уровне вызова.

Чтобы пробросить ошибку от внешнего пакета, не раскрывая внутренние детали, используют обёртки и форматирование ошибок с помощью пакетов fmt или errors.

Например, можно добавить контекст к ошибке, не раскрывая внутреннюю структуру:

if err := externalPackage.DoSomething(); err != nil {
    return fmt.Errorf("не удалось выполнить операцию: %w", err)
}

Здесь %w позволяет обернуть исходную ошибку, сохраняя возможность её дальнейшей проверки через errors.Is или errors.As.

Таким образом, внешний код получает понятное сообщение об ошибке без доступа к внутренним деталям реализации, но при этом сохраняется возможность детального анализа ошибки при необходимости.