Sobes.tech
Senior

Hoe werkt Go met fouten? Hoe wordt een fout van een extern pakket naar een hoger niveau doorgegeven zonder de interne details te onthullen?

sobes.tech AI

Antwoord van AI

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

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

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

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

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

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