package
0.0.0-20230227182153-5f8c28c9b9ef
Repository: https://github.com/jkrus/master_api.git
Documentation: pkg.go.dev

# README

errors

функционал для работы с ошибками

Оборачивание (аннотирование) ошибок

осуществляется с помощью функций Wrap и Wrapf:

return errors.Wrapf(err, "parse config file %s", fileName)

Определение ошибок

Осуществляется с помощью функций Is и As – обертки функций из стандартной библиотеки

Контексты ошибок.

В ошибки может быть вшит структурированный контекст, который затем можно, передавать через параметр контекста и раскрывать, например в логгере.

Пример:

err := errors.Ctx().String("id", "845aa443-7a63-439d-950b-4b93d72da903").String("ipaddr", "127.0.0.1").New("some error")

поддерживаются следующие методы сохранения значений:

  • Int(name string, value int)
  • Int8(name string, value int8)
  • Int16(name string, value int16)
  • Int32(name string, value int32)
  • Int64(name string, value int64)
  • Uint(name string, value uint)
  • Uint8(name string, value uint8)
  • Uint16(name string, value uint16)
  • Uint32(name string, value uint32)
  • Uint64(name string, value uint64)
  • Float32(name string, value float32)
  • Float64(name string, value float64)
  • String(name string, value string)
  • Strings(name string, values []string)
  • Any(name string, value interface{})
  • Line()

Метод Line() в данном применении, сохраняет позицию <файл>:<строка> на которой произошёл его вызов. Его вызов заменяет предыдущее значение (предыдущий вызов Line)

После сохранения необходимых контекстных значений нужно вызвать один из методов контекста:

  • New
  • Newf
  • Wrap
  • Wrapf

для получения ошибки аннотированной контекстом

TODO: добавить работу со списками ошибок и error-group для упрощения поднятия наверх всех нужных ошибок, например в асинхронщине.