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

Функция с ошибкой в Go

Проверку аргумента прячут внутрь функции. Если значение не годится, функция возвращает ошибку, а вызывающий код решает, что показать.

Функция возвращает элемент среза по индексу только для неотрицательного индекса в пределах длины. Иначе - ошибка с текстом:

package main import "errors" func getAt(nums []int, index int) (int, error) { if index < 0 { return 0, errors.New("negative index") } if index >= len(nums) { return 0, errors.New("bad index") } return nums[index], nil } func main() { }

Вызов проверяют в main, чтобы отловить и неверный аргумент, и выход за границы среза:

package main import ( "errors" "fmt" ) func getAt(nums []int, index int) (int, error) { if index < 0 { return 0, errors.New("negative index") } if index >= len(nums) { return 0, errors.New("bad index") } return nums[index], nil } func main() { nums := []int{10, 20, 30} val, err := getAt(nums, -1) if err != nil { fmt.Println("bad arg") } else { fmt.Println(val) } }

Та же схема работает для проверки диапазона процента. Одна проверка err в месте вызова задает реакцию на любой сбой функции:

package main import ( "errors" "fmt" ) func percent(value int) error { if value < 0 || value > 100 { return errors.New("out of range") } fmt.Printf("%d%%\n", value) return nil } func main() { err := percent(150) if err != nil { fmt.Println("invalid percent") } }

Создайте функцию ensureNonNegative с параметром n. Для n < 0 верните ошибку с сообщением "negative". Иначе верните n и nil.

Создайте функцию divide с двумя целыми параметрами. При b == 0 верните ошибку. Иначе верните частное. В main вызовите ее с нулевым делителем, проверьте err и выведите "fail" при сбое.

Создайте функцию charAtSafe со строкой и индексом. При отрицательном индексе или если индекс не меньше длины строки, верните ошибку. Иначе верните символ строки как строку длины 1. Проверьте вызов с большим индексом в main.

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