Обработка ошибок: defer, panic и recover в Go

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

Godeferpanic

👁 В Go работа с ошибками часто является неотъемлемой частью бизнес-логики. Важно уметь правильно управлять ошибками в условиях многозадачности или при работе с ресурсами, которые могут привести к сбоям. Использование конструкций defer, panic и recover позволяет не только предотвращать ошибки, но и организовывать чистку ресурсов при их возникновении.

📝 Пример кода:

package main

import (
    "fmt"
    "log"
)

func riskyFunction() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Ошибка поймана:", r)
        }
    }()
    
    fmt.Println("Начинаю выполнение функции...")
    panic("Что-то пошло не так!")  // Имитируем ошибку
}

func main() {
    fmt.Println("Запуск программы...")
    riskyFunction()
    fmt.Println("Программа завершена.")
}

📌 Как это работает:

  • defer: откладывает выполнение кода до выхода из текущей функции, что полезно для чистки ресурсов (например, закрытия файлов)
  • panic: генерирует ошибку, аналогичную исключению в других языках, что позволяет мгновенно прервать выполнение
  • recover: используется для перехвата паники, предотвращая крах программы и позволяя обработать ошибку

❗️ Этот подход позволяет эффективно обрабатывать ошибки в более сложных приложениях, где необходимо обеспечить устойчивость к сбоям и корректную очистку ресурсов. Применяется, например, в ситуациях, когда нужно контролировать ошибки работы с сетью или базой данных, а также управлять многозадачностью в крупных проектах.

tags: #go #разработка

❤️ @recura_tech

Темный фон с фрагментом кода на Go, демонстрирующим использование defer, panic и recover; виден текст и логотип RECURA внизу.
Фрагмент кода на Go с демонстрацией defer/recover/panic и логотипом RECURA.

Читайте так же