Обработка ошибок - важная особенность надежного кода. В этом разделе вы добавите немного кода, чтобы вернуть ошибку из модуля greetings, а затем обработать ее в вызывающей программе.
Примечание. Этот раздел является частью руководства, состоящего из нескольких частей, который начинается с создания модуля Go.
В greetings/greetings.go добавьте код, выделенный ниже.
Нет смысла отправлять приветствие в ответ, если вы не знаете, кого приветствовать. Вернуть вызывающему абоненту сообщение об ошибке, если имя пусто. Скопируйте следующий код в greetings.go и сохраните файл.
package greetings
import (
"errors"
"fmt"
)
// Hello возвращает приветствие для указанного человека.
func Hello(name string) (string, error) {
// Если имя не было указано, возвращаем ошибку с сообщением.
if name == "" {
return "", errors.New("empty name")
}
// Если имя было получено, возвращаем значение,
// включающее имя в приветственном сообщении.
message := fmt.Sprintf("Hi, %v. Welcome!", name)
return message, nil
}
В этом коде вы:
- Измените функцию так, чтобы она возвращала два значения: строку и ошибку. Ваш абонент проверит второе значение, чтобы увидеть, произошла ли ошибка. (Любая функция Go может возвращать несколько значений.)
- Импортируете пакет errors стандартной библиотеки Go, чтобы вы могли использовать его errors.New функцию.
- Добавляете оператор if, чтобы проверить недействительный запрос (пустую строку, где должно быть имя) и вернуть ошибку, если запрос недействителен. Функция errors.New возвращает ошибку с вашим сообщением внутри.
- Добавляете nil (что означает отсутствие ошибки) в качестве второго значения в успешном возврате. Таким образом, вызывающий может увидеть, что функция выполнена успешно.
В файле hello/hello.go обработайте ошибку, возвращаемую функцией Hello, вместе со значением, не связанным с ошибкой. Вставьте следующий код в hello.go.
package main
import (
"fmt"
"log"
"example.com/greetings"
)
func main() {
// Устанавливаем свойства предопределенного Logger, включая
// префикс записи журнала и флаг отключения печати
// время, исходный файл и номер строки.
log.SetPrefix("greetings: ")
log.SetFlags(0)
// Запрос приветственного сообщения.
message, err := greetings.Hello("")
// Если вернулась ошибка, выводим ее в консоль и
// выходим из программы.
if err != nil {
log.Fatal(err)
}
// Если ошибок не было, распечатываем возвращенное сообщение
// в консоль.
fmt.Println(message)
}
В этом коде вы:
- Настроете пакет log для печати имени команды ("greetings: ") в начале сообщений журнала без отметки времени или информации об исходном файле.
- Присвоете переменным оба возвращаемых значения Hello, включая ошибку.
- Измените аргумент Hello с имени Gladys на пустую строку, чтобы вы могли опробовать свой код обработки ошибок.
- Найдете значение ошибки, отличное от нуля. В этом случае нет смысла продолжать.
- Используете функции из пакета log стандартной библиотеки для вывода информации об ошибках. Если вы получили сообщение об ошибке, вы используете функцию Fatal пакета log, чтобы распечатать ошибку и остановить программу.
В командной строке в каталоге hello запустите hello.go, чтобы убедиться, что код работает.
Теперь, когда вы передаете пустое имя, вы получите сообщение об ошибке.
$ go run .
greetings: empty name
exit status 1
Это обычная обработка ошибок в Go: возвращать ошибку как значение, чтобы вызывающий мог ее проверить.
Далее, в следующем посте, вы будете использовать срез Go, чтобы вернуть случайно выбранное приветствие.
Читайте также:
- Создание модуля в Golang
- Создание модуля в Golang: вызов своего кода из другого модуля
- Создание модуля в Golang: возврат случайного приветствия
- Создание модуля в Golang: ответные приветствия для нескольких человек
- Создание модуля в Golang: добавить тест
- Создание модуля в Golang: скомпилируйте и установите приложение
- Управление зависимостями в Golang
Комментариев нет:
Отправить комментарий