РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
493 of 1593 menu

Глагол %w для ошибок

Глагол %w в функции fmt.Errorf используется для обертывания одной ошибки в другую, создавая цепочку ошибок. Это позволяет сохранить информацию о первоначальной ошибке, добавляя к ней дополнительный контекст. В первый параметр через fmt.Errorf мы передаем строку формата с глаголом %w, во второй параметр мы передаем ошибку, которую нужно обернуть.

Синтаксис

err := fmt.Errorf("additional context: %w", originalErr)

Пример

Давайте обернем ошибку, добавив к ней контекст:

package main import ( "errors" "fmt" ) func main() { originalErr := errors.New("connection refused") wrappedErr := fmt.Errorf("failed to connect: %w", originalErr) fmt.Println(wrappedErr) }

Результат выполнения кода:

"failed to connect: connection refused"

Пример

Давайте проверим, можно ли извлечь оригинальную ошибку из цепочки с помощью errors.Is:

package main import ( "errors" "fmt" ) func main() { originalErr := errors.New("database error") wrappedErr := fmt.Errorf("query execution: %w", originalErr) if errors.Is(wrappedErr, originalErr) { fmt.Println("original error found") } }

Результат выполнения кода:

"original error found"

Пример

Давайте создадим цепочку из нескольких ошибок и распакуем их с помощью errors.Unwrap:

package main import ( "errors" "fmt" ) func main() { baseErr := errors.New("timeout") middleErr := fmt.Errorf("read timeout: %w", baseErr) topErr := fmt.Errorf("request failed: %w", middleErr) fmt.Println(topErr) fmt.Println(errors.Unwrap(topErr)) fmt.Println(errors.Unwrap(errors.Unwrap(topErr))) }

Результат выполнения кода:

"request failed: read timeout: timeout" "read timeout: timeout" "timeout"

Смотрите также

  • функцию fmt.Errorf,
    которая создает ошибки с форматированием и поддерживает обертку
  • функцию errors.Unwrap,
    которая извлекает обернутую ошибку
  • функцию errors.Is,
    которая проверяет наличие конкретной ошибки в цепочке
  • функцию errors.As,
    которая находит ошибку определенного типа в цепочке
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить