Проверяет понимание создания пользовательских типов ошибок в Go для более точной обработки ошибок.
В Go ошибки реализуют встроенный интерфейс error, который требует только один метод: Error() string. Чтобы создать собственный тип ошибки, нужно определить структуру, которая содержит дополнительные поля (например, код ошибки, контекст), и реализовать для неё метод Error().
type MyError struct {
Code int
Message string
}
func (e *MyError) Error() string {
return fmt.Sprintf("error %d: %s", e.Code, e.Message)
}
func doSomething() error {
return &MyError{Code: 404, Message: "not found"}
}
func main() {
err := doSomething()
if e, ok := err.(*MyError); ok {
fmt.Println("Custom error:", e.Code)
}
}Кастомные ошибки полезны, когда нужно передать дополнительную информацию об ошибке, например, HTTP-статус код, идентификатор запроса или внутренний код ошибки. Они позволяют вызывающему коду различать типы ошибок и принимать соответствующие решения.
Используйте кастомные типы ошибок, когда стандартного сообщения недостаточно и требуется структурированная обработка ошибок, особенно в больших приложениях или библиотеках.