Функция fmt.Errorf

Функция fmt.Errorf создает новую ошибку с форматированным сообщением. Она принимает строку форматирования и аргументы, аналогично функциям fmt.Printf и fmt.Sprintf. Первым параметром функция принимает строку формата с вербовочными символами, последующими параметрами - значения для подстановки в эту строку. Функция возвращает значение типа error, которое можно использовать для обработки ошибок.

Синтаксис

gofmt.Errorf(format string, a ...any) error

Пример

Давайте создадим ошибку с информацией о числе:

gopackage main

import (
  "fmt"
)

func main() {
  num := 10
  err := fmt.Errorf("число %d должно быть положительным", num)
  fmt.Println(err)
}

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

go"число 10 должно быть положительным"

Пример

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

gopackage main

import (
  "fmt"
)

func main() {
  name := "user"
  id := 42
  err := fmt.Errorf("пользователь %s с ID %d не найден", name, id)
  fmt.Println(err)
}

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

go"пользователь user с ID 42 не найден"

Пример

Давайте используем функцию для возврата ошибки из функции:

gopackage main

import (
  "fmt"
)

func divide(a, b int) (int, error) {
  if b == 0 {
    return 0, fmt.Errorf("деление на ноль: a=%d, b=%d", a, b)
  }
  return a / b, nil
}

func main() {
  res, err := divide(10, 0)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(res)
}

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

go"деление на ноль: a=10, b=0"

Пример

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

gopackage main

import (
  "fmt"
)

func main() {
  value := 3.14159
  status := true
  err := fmt.Errorf("значение: %.2f, статус: %t", value, status)
  fmt.Println(err)
}

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

go"значение: 3.14, статус: true"

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

  • функцию errors.New,
    которая создает ошибку без форматирования
  • функцию errors.Is,
    которая проверяет наличие ошибки в цепочке
  • функцию errors.As,
    которая извлекает ошибку определенного типа из цепочки
  • функцию wrap-verb,
    которая позволяет обертывать ошибки с помощью %w