«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как справиться с паникой в ​​процедурах Go: понимание области восстановления?

Как справиться с паникой в ​​процедурах Go: понимание области восстановления?

Опубликовано 10 ноября 2024 г.
Просматривать:133

How to Handle Panics in Go Routines: Understanding Recover Scope?

Обработка паники в процедурах Go

Go предоставляет встроенные функции Panic() и Recovery() для управления неожиданными ошибками и фатальными ситуациями в работающий код. Чтобы справиться с паникой в ​​программе go, важно понимать область действия функции восстановления().

Понимание области действия функции восстановления()

recover() может восстанавливаться только после паники внутри той же горутины, которая вызвала панику. Если в горутине без активного восстановления() возникает паника, вся программа выйдет из строя.

Пример с неправильной обработкой ошибок

Приведенный пример кода в вопросе не может обработать панику, поскольку в основной подпрограмме определена функция восстановления(), а в горутине handle() определена паника. В результате функция восстановления() не может получить доступ к значению паники.

func main() {
    // ...

    go handle(done)
    // ...
}

func handle(done chan int64) {
    // ...
    fmt.Println(*a) // Panic here
    done 

Пример с правильной обработкой ошибок

Чтобы обрабатывать панику, возникающую в горутине, поместите функцию восстановления() внутри самой горутины.

func main() {
    // ...

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered")
        }
    }()

    go handle(done)
    // ...
}

func handle(done chan int64) {
    // ...
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered")
        }
    }()

    fmt.Println(*a) // Panic here
    done 

Объяснение

В этом исправленном примере функция восстановления() теперь находится внутри горутины handle(), поэтому она может улавливать панику, возникающую при разыменовании нулевого указателя. Затем паника восстанавливается, и выводится сообщение «Восстановлено».

Понимание области действия Recovery() имеет решающее значение для эффективной обработки ошибок в процедурах Go. Всегда размещайте функцию восстановления() в той же горутине, где может возникнуть паника, чтобы корректно обрабатывать и сообщать о любых непредвиденных ситуациях.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3