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 для упрощения поднятия наверх всех нужных ошибок, например в асинхронщине.

# Functions

And возвращает ошибку являющуюся списком.
As ищет первую ошибку в цепочке вложенных в err с типом и делает target, который является указателем на объект чей тип реализует встроенный интерфейс error.
AsList ищет тип `errors.List` во вложенных ошибках и возвращает его.
Ctx возврат контекста ошибки.
GetContextReporter получает репортера из ошибки.
Is сообщает, имеется ли в цепочке вложенных в err ошибок данная (target).
New обёртка для errors.New из стандартной библиотеки.
Newf обёртка для fmt.Errorf из стандартной библиотеки.
Reloc изменяет место возникновения ошибки если оно установлено или добавляет его.
Unwrap возвращает err.Unwrap(), если у типа имеется данный метод, иначе возвращает сам err.
Wrap аннотация ошибки данным сообщением msgs, "заматывание".
Wrapf аннотация ошибки с помощью данного форматированного сообщения.

# Interfaces

ContextBuilder заполнение контекста информацией и функции завершения построения.
ContextReportBuilder абстракция занесения сущностей сохранённых ContextBuilder в контекст, например, логгера.
ContextReporter сущность для абстракции отдачи значений контекста внешним потребителя реализующим ContextReportBuilder.
Reporter описание сущностей возвращающих репортер контекста.

# Type aliases

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