вторник, 15 января 2019 г.

Основы Go: ошибки

Программы на 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


Читайте также:


Комментариев нет:

Отправить комментарий