return fmt.Errorf(«otherMethod %w with val %v», err, val)
}
return nil
}
Проблемы такого подхода:
— **Дублирование названий методов** в сообщениях об ошибках
— **Ручное добавление метаданных** (аргументы, переменные) в каждое место
— **Сложность отслеживания** места возникновения ошибки при нескольких точках выхода
— **Засорение кода** — повторяющийся boilerplate
— **Отсутствие структуры** — все метаданные упакованы в одной строке
Что если объединить мощь структурированного логирования (`slog`) с автоматическим сбором локального стека вызовов. Результат — чистый код и информативные логи.
d
## Решение: структурированные ошибки + автоматический стек
**Было:**
```go
func (*SomeObject) SomeMethod(val any) error {
if err := otherMethod(val); err != nil {
slog.Error(err, «val», val) // дублирование
return fmt.Errorf(«someMethod %w with val %v», err, val)
}
return nil
}