Функция fmt.Errorf
Функция fmt.Errorf создает новую ошибку с форматированным сообщением.
Она принимает строку форматирования и аргументы, аналогично функциям
fmt.Printf и fmt.Sprintf. Первым параметром функция
принимает строку формата с вербовочными символами, последующими
параметрами - значения для подстановки в эту строку. Функция возвращает
значение типа error, которое можно использовать для обработки ошибок.
Синтаксис
fmt.Errorf(format string, a ...any) error
Пример
Давайте создадим ошибку с информацией о числе:
package main
import (
"fmt"
)
func main() {
num := 10
err := fmt.Errorf("число %d должно быть положительным", num)
fmt.Println(err)
}
Результат выполнения кода:
"число 10 должно быть положительным"
Пример
Давайте создадим ошибку с несколькими значениями разных типов:
package main
import (
"fmt"
)
func main() {
name := "user"
id := 42
err := fmt.Errorf("пользователь %s с ID %d не найден", name, id)
fmt.Println(err)
}
Результат выполнения кода:
"пользователь user с ID 42 не найден"
Пример
Давайте используем функцию для возврата ошибки из функции:
package 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)
}
Результат выполнения кода:
"деление на ноль: a=10, b=0"
Пример
Давайте создадим ошибку с использованием вербовочных символов для разных типов данных:
package main
import (
"fmt"
)
func main() {
value := 3.14159
status := true
err := fmt.Errorf("значение: %.2f, статус: %t", value, status)
fmt.Println(err)
}
Результат выполнения кода:
"значение: 3.14, статус: true"
Смотрите также
-
функцию
errors.New,
которая создает ошибку без форматирования -
функцию
errors.Is,
которая проверяет наличие ошибки в цепочке -
функцию
errors.As,
которая извлекает ошибку определенного типа из цепочки -
функцию
wrap-verb,
которая позволяет обертывать ошибки с помощью %w