Как в Go принято обрабатывать ошибки? Что такое паника и как её обработать?
Ответ от нейросети
sobes.tech AI
В Go ошибки принято обрабатывать явно, возвращая значение ошибки из функции и проверяя его в месте вызова. Это позволяет контролировать поток выполнения и принимать решения при возникновении ошибок.
Пример обработки ошибки:
func readFile(filename string) ([]byte, error) {
data, err := os.ReadFile(filename)
if err != nil {
return nil, err
}
return data, nil
}
func main() {
data, err := readFile("file.txt")
if err != nil {
fmt.Println("Ошибка чтения файла:", err)
return
}
fmt.Println(string(data))
}
Паника (panic) — это механизм, который используется для обработки критических ошибок, когда программа не может продолжать нормальное выполнение. При вызове panic выполнение функции прерывается, начинается «раскрутка» стека вызовов (stack unwinding), вызываются отложенные функции (defer), и если паника не будет обработана, программа завершится с ошибкой.
Обработать панику можно с помощью функции recover(), которую обычно вызывают в отложенной функции:
func safeFunction() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Восстановились после паники:", r)
}
}()
panic("что-то пошло не так")
}
Таким образом, в Go ошибки обрабатываются через возвращаемые значения, а паника используется для критических ситуаций, которые можно попытаться восстановить с помощью recover.