Проверка ошибок
В Go ошибки представлены встроенным интерфейсом error.
Этот интерфейс содержит единственный метод Error() string,
который возвращает текстовое описание ошибки.
Проверка ошибок в Go выполняется путем сравнения возвращаемого
значения ошибки с nil. Если функция возвращает ошибку,
не равную nil, значит, произошла ошибка, и ее нужно обработать.
В отличие от исключений в других языках, Go требует явной проверки
каждой ошибки, что делает код более надежным и предсказуемым.
Синтаксис
if err := doSomething(); err != nil {
// handle error
return err
}
Пример
Давайте рассмотрим базовый пример проверки ошибки при открытии файла:
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("nonexistent.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
fmt.Println("File opened successfully")
}
Результат выполнения кода (если файл не существует):
"open nonexistent.txt: no such file or directory"
Пример
Проверим ошибку при преобразовании строки в число с помощью strconv.Atoi:
package main
import (
"fmt"
"strconv"
)
func main() {
num, err := strconv.Atoi("abc")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Number:", num)
}
Результат выполнения кода:
"Error: strconv.Atoi: parsing \"abc\": invalid syntax"
Пример
Рассмотрим пример обработки ошибки в функции, которая возвращает несколько значений:
package main
import (
"errors"
"fmt"
)
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func main() {
res, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Result:", res)
}
Результат выполнения кода:
"Error: division by zero"
Смотрите также
-
тип
error,
который представляет собой интерфейс для работы с ошибками -
функцию
errors.New,
которая создает новую ошибку с заданным текстом -
функцию
errors.Is,
которая проверяет, является ли ошибка определенным типом -
функцию
errors.As,
которая извлекает ошибку определенного типа из цепочки