Menu
Coddy logo textTech

Функции, возвращающие ошибки

Часть раздела Основы путешествия по GO на Coddy — урок 104 из 109.

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

Создайте функцию, которая возвращает и результат, и ошибку:

func divide(a, b float64) (float64, 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
challenge icon

Задание

Новичок

В этом испытании вы попрактикуетесь в создании функции, которая возвращает ошибку при получении неверных входных данных.

Вам нужно дополнить функцию validateUsername, которая проверяет, является ли имя пользователя допустимым. Имя пользователя считается допустимым, если его длина составляет не менее 3 символов. Если имя пользователя допустимо, верните nil в качестве ошибки. Если оно недопустимо, верните ошибку с соответствующим сообщением.

Код для вызова вашей функции и обработки ошибки уже написан за вас.

Примечание: В этом испытании используются предопределенные переменные вместо пользовательского ввода.

Шпаргалка

Функции в Go обычно возвращают error в качестве последнего возвращаемого значения, чтобы указать, если что-то пошло не так.

Создайте функцию, которая возвращает и результат, и ошибку:

func divide(a, b float64) (float64, 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)
}

Возвращайте nil, когда ошибки нет, и используйте errors.New() для создания сообщений об ошибках.

Попробуйте сами

package main

import (
	"errors"
	"fmt"
)

func validateUsername(username string) error {
	// TODO: Проверить, если длина имени пользователя меньше 3 символов
	// Если это так, вернуть ошибку с сообщением "username too short"
	// В противном случае вернуть nil (нет ошибки)
	
	return nil
}

func main() {
	// Тест с валидным именем пользователя
	validName := "bob123"
	err1 := validateUsername(validName)
	if err1 != nil {
		fmt.Printf("%s is invalid: %v\n", validName, err1)
	} else {
		fmt.Printf("%s is valid!\n", validName)
	}
	
	// Тест с невалидным именем пользователя
	invalidName := "ab"
	err2 := validateUsername(invalidName)
	if err2 != nil {
		fmt.Printf("%s is invalid: %v\n", invalidName, err2)
	} else {
		fmt.Printf("%s is valid!\n", invalidName)
	}
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы