РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
496 of 1593 menu

Возврат нескольких значений с error

В Go функция может возвращать несколько значений. Чаще всего вторым или последним значением возвращается ошибка типа error. Если ошибки нет, возвращается nil, а если произошла ошибка — возвращается конкретная ошибка, а полезное значение обычно игнорируется или равно нулевому значению для своего типа.

Синтаксис

func functionName(params) (returnType, error) { // code }

Пример

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

package main import ( "errors" "fmt" ) func divide(a, b float64) (float64, error) { if b == 0 { return 0, errors.New("деление на ноль") } return a / b, nil } func main() { res, err := divide(10, 2) if err != nil { fmt.Println("Ошибка:", err) return } fmt.Println("Результат:", res) }

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

"Результат: 5"

Пример

Теперь попробуем разделить на ноль и посмотрим, как обрабатывается ошибка:

package main import ( "errors" "fmt" ) func divide(a, b float64) (float64, error) { if b == 0 { return 0, errors.New("деление на ноль") } return a / b, nil } func main() { res, err := divide(10, 0) if err != nil { fmt.Println("Ошибка:", err) return } fmt.Println("Результат:", res) }

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

"Ошибка: деление на ноль"

Пример

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

package main import ( "errors" "fmt" ) func greet(name string) (string, error) { if name == "" { return "", errors.New("имя не может быть пустым") } return "Привет, " + name + "!", nil } func main() { msg, err := greet("Alice") if err != nil { fmt.Println("Ошибка:", err) return } fmt.Println(msg) }

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

"Привет, Alice!"

Пример

А теперь передадим пустую строку и посмотрим на обработку ошибки:

package main import ( "errors" "fmt" ) func greet(name string) (string, error) { if name == "" { return "", errors.New("имя не может быть пустым") } return "Привет, " + name + "!", nil } func main() { msg, err := greet("") if err != nil { fmt.Println("Ошибка:", err) return } fmt.Println(msg) }

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

"Ошибка: имя не может быть пустым"

Пример

В Go часто возвращают несколько значений вместе с ошибкой. Например, функция может вернуть результат и флаг успешности, а также ошибку:

package main import ( "errors" "fmt" ) func processData(data string) (string, bool, error) { if data == "" { return "", false, errors.New("данные пустые") } return "обработано: " + data, true, nil } func main() { result, ok, err := processData("test") if err != nil { fmt.Println("Ошибка:", err) return } fmt.Printf("Результат: %s, Успех: %t\n", result, ok) }

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

"Результат: обработано: test, Успех: true"

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

  • функцию error
    встроенный интерфейс для работы с ошибками
  • функцию errors.New
    создание новой ошибки
  • функцию custom error
    создание пользовательских типов ошибок
  • функцию checking
    способы проверки ошибок в Go
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить