Стратегия «Полки»: repo создаёт сентинелы, service оборачивает через %w, handler различает через errors.Is. Реализуйте Get, GetFile и handle.
- Задача
- Решение
- Обсуждение
ThreeLayers: repo, service, handler
GolangРешение
func Get(id string) (string, error) {
if id == "42" {
return "данные 42", nil
}
return "", ErrNotFound
}
func GetFile(id string) (string, error) {
data, err := Get(id)
if err != nil {
return "", fmt.Errorf("получить файл %s: %w", id, err)
}
return data, nil
}
func handle(id string) int {
_, err := GetFile(id)
if err != nil {
if errors.Is(err, ErrNotFound) {
return 404
}
return 500
}
return 200
}