Создание ошибки в Go
Сбой можно оформить самим, а не ждать готовое
значение из библиотеки. Пакет errors
дает функцию New: она создает значение
типа error с заданным текстом. Его
возвращают вторым результатом, а вызывающий
код проверяет err:
package main
import (
"errors"
"fmt"
)
func main() {
err := errors.New("message")
fmt.Println(err != nil) // выведет true
}
В учебных задачах удобно возвращать такую ошибку, когда параметр нарушает правило. Функция выводит число только для четного аргумента:
package main
import (
"errors"
"fmt"
)
func requireEven(n int) error {
if n%2 != 0 {
return errors.New("even only")
}
fmt.Println(n)
return nil
}
func main() {
err := requireEven(3)
if err != nil {
fmt.Println("rejected")
}
}
Та же схема подходит, если деление на ноль
проверяют вручную до операции /:
package main
import (
"errors"
"fmt"
)
func safeDiv(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("zero divisor")
}
return a / b, nil
}
func main() {
val, err := safeDiv(8, 0)
if err != nil {
fmt.Println("cannot divide")
} else {
fmt.Println(val)
}
}
Сообщения в коде пишите на английском, как и имена переменных. Прочитать текст ошибки на экране разберем в следующем уроке.
Создайте функцию printIfPositive с
параметром n. Для n <= 0
верните ошибку с сообщением "not positive".
Иначе выведите n и верните nil.
В main вызовите printIfPositive(-2).
При ненулевой ошибке выведите "bad".