Comments 2
package util
import (
"fmt"
"runtime"
)
func Wrap(err error, args ...any) error {
if err == nil {
return nil
}
pc, _, _, _ := runtime.Caller(1) // 1 ‒ вызывающая функция
fn := runtime.FuncForPC(pc).Name() // имя метода
return fmt.Errorf("%s%v: %w", fn, args, err)
}
Использование (copy paste)
func (s *SomeObject) SomeMethod(val any) error {
if err := otherMethod(val); err != nil {
return util.Wrap(err, val) // автомат: имя метода + значения
}
return nil
}
И на уровне контроллера ловим, показываем или логируем в зависимости от ситуации
Sign up to leave a comment.
Структурированные логи + локальный стек вызовов: эволюция обработки ошибок в Go