Блог Go: отсрочка, паника, восстановление — статья, опубликованная в официальном блоге языка программирования Go. В нем обсуждаются три важных механизма потока управления в Go: defer, panicи recover. Эти механизмы используются для обработки ошибок, управления ресурсами и потока управления в программах Go.
Вот примеры использования defer, panicи recoverв коде Go:
defer:
Инструкцияdeferиспользуется для планирования выполнения вызова функции при возврате из окружающей функции. Он часто используется для задач очистки.
func cleanup() {
fmt.Println("Cleanup task executed!")
}
func main() {
defer cleanup() // cleanup() will be called when main() returns
fmt.Println("Main function executing...")
// Rest of the code
}
panic:
Функцияpanicиспользуется для вызова ошибки во время выполнения. Он немедленно останавливает обычный поток выполнения и начинает раскручивать стек, выполняя по пути все отложенные функции.
func main() {
fmt.Println("Before panic")
panic("Something went wrong!")
fmt.Println("After panic") // This line won't be executed
}
recover:
Функцияrecoverиспользуется для восстановления контроля над горутиной, находящейся в состоянии паники. Это полезно только внутри отложенных функций.recoverостанавливает последовательность паники и возвращает значение, переданное в функциюpanic.
func handlePanic() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}
func main() {
defer handlePanic()
fmt.Println("Before panic")
panic("Something went wrong!")
fmt.Println("After panic") // This line won't be executed
}