Создание простых ошибок
Часть раздела Основы путешествия по GO на Coddy — урок 106 из 109.
В Go вы можете создавать пользовательские ошибки, используя функцию errors.New() из стандартной библиотеки.
Импортируйте пакет errors:
import (
"errors"
"fmt"
)Создайте простую ошибку с сообщением:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}Вывод будет:
Error: cannot divide by zeroЗадание
НовичокВ этом испытании вы попрактикуетесь в создании простой ошибки в Go с помощью функции errors.New().
У вас есть функция, которая проверяет, является ли имя пользователя допустимым. Имя пользователя считается допустимым, если оно содержит как минимум 5 символов. Ваша задача — завершить функцию, возвращая соответствующую ошибку, когда имя пользователя слишком короткое.
Шпаргалка
Создавайте пользовательские ошибки с помощью errors.New() из стандартной библиотеки:
import (
"errors"
"fmt"
)Возврат ошибки из функции:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Обработка ошибки:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}Попробуйте сами
package main
import (
"errors"
"fmt"
)
func main() {
// Тест с допустимым именем пользователя
result, err := validateUsername("gopher123")
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println(result)
}
// Тест с недопустимым именем пользователя
result, err = validateUsername("go")
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println(result)
}
}
func validateUsername(username string) (string, error) {
if len(username) < 5 {
// TODO: Вернуть ошибку с сообщением "username must be at least 5 characters long"
// Подсказка: используйте errors.New() для создания новой ошибки
return "", nil // Замените эту строку
}
return "Username is valid", nil
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода11Составные типы: Срезы
Введение в срезыОбъявление литералов срезовСоздание срезов с помощью `make`Длина и емкость срезаДоступ к элементам срезаДобавление элементовПолучение срезов из существующих срезов/массивовИтерация по срезамКопирование срезовИтоги: Динамические списки14Основы обработки ошибок
Концепция ошибокИнтерфейс `error`Функции, возвращающие ошибкиПроверка ошибокСоздание простых ошибокСоздание форматированных ошибокОсновы обработки ошибокИтоги — решение проблем3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решений