Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goPmErCk 291 of 350 menu
◀ ▶

Проверка ошибки в Go

Опасный участок можно не ронять всю программу. После вызова с парой результатов проверяют ошибку: если err не равен nil, операция сорвалась. Успех означает err == nil:

package main import ( "errors" "fmt" ) func itemAt(nums []int, index int) (int, error) { if index < 0 || index >= len(nums) { return 0, errors.New("bad index") } return nums[index], nil } func main() { nums := []int{1, 2, 3} val, err := itemAt(nums, 10) if err != nil { fmt.Println("failed") } else { fmt.Println(val) } }

Обратимся к элементу среза по неверному индексу через функцию с проверкой границ. Без проверки err программа выведет только сообщение о сбое:

Запишем ту же схему для допустимого индекса. Ветка с if err != nil пропускается, выполнение идет дальше, как после обычной команды:

package main import ( "errors" "fmt" ) func itemAt(nums []int, index int) (int, error) { if index < 0 || index >= len(nums) { return 0, errors.New("bad index") } return nums[index], nil } func main() { nums := []int{5, 6, 7} val, err := itemAt(nums, 0) if err != nil { fmt.Println("failed") } else { fmt.Println(val) } fmt.Println("done") // выведет done }

Переменная err хранит значение типа error. Его можно вывести или передать дальше; текст сообщения разберем отдельно.

Дан срез целых чисел из трех элементов. Выведите элемент с индексом 10 через функцию с парой результатов. Если обращение сорвалось, выведите "failed".

Дан срез целых чисел. Запросите у пользователя индекс. Получите элемент по этому индексу функцией с ошибкой. При сбое выведите "failed".

Дан следующий код:

<~show~> <+go+> package main import ( "errors" "fmt" ) func lenWord(str string) (int, error) { if str == "" { return 0, errors.New("empty") } return len(str), nil } func main() { fmt.Println(lenWord("abc")) fmt.Println(lenWord("")) } <-go-> <-show~>

Проверьте err после каждого вызова. При сбое выведите "failed", иначе - длину строки.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить