Программы на Go выражают состояние ошибки с помощью значения типа error.
Тип error является встроенным типом, таким же как и fmt.Stringer:
type error interface {
Error() string
}
(Как и в случае с fmt.Stringer, пакет fmt ожидает интерфейс error, когда выводит значения.)
Функции часто возвращает значения типа error, а проверяющему коду следует обрабатывать ошибки проверяя, является ли error равным nil.
i, err := strconv.Atoi("42")
if err != nil {
fmt.Printf("ошибка конвертации числа: %v\n", err)
return
}
fmt.Println("Сконвертированное целое число:", i)
error равное nil означает успех; не-nil значение error означает неудачу.
Пример:
package main
import (
"fmt"
"time"
)
type MyError struct {
When time.Time
What string
}
func (e *MyError) Error() string {
return fmt.Sprintf("at %v, %s",
e.When, e.What)
}
func run() error {
return &MyError{
time.Now(),
"it didn't work",
}
}
func main() {
if err := run(); err != nil {
fmt.Println(err)
}
}
Вывод:
at 2009-11-10 23:00:00 +0000 UTC m=+0.000000001,
it didn't work
Читайте также:
- Основы языка Go: интерфейсы
- Основы языка Go: Stringers
- Основы языка Go: методы, получатели и указатели
Комментариев нет:
Отправить комментарий