Maison  >  Article  >  développement back-end  >  Comment se remettre de la panique à Golang ?

Comment se remettre de la panique à Golang ?

WBOY
WBOYoriginal
2024-06-01 18:44:00860parcourir

Dans Go, récupérez d'une panique à l'aide de la fonction de récupération, qui renvoie la valeur de panique la plus récente de la pile de fonctions. En combat réel, vous pouvez gérer les exceptions io.EOF, par exemple : ouvrez un fichier et utilisez defer pour attraper la panique. Si la panique est égale à io.EOF, quittez normalement, sinon la panique se produira.

如何在 Golang 中从 panic 中恢复?

Comment se remettre de la panique à Golang ?

Dans Golang, la panique entraînera la fermeture anormale du programme. Bien que panic soit utile pour gérer les erreurs irrécupérables, il existe des situations dans lesquelles vous souhaiterez peut-être récupérer et poursuivre l'exécution. panic 会导致程序异常退出。虽然 panic 对于处理不可恢复的错误很有用,但在某些情况下,你可能希望恢复并继续执行。

使用 recover 函数可以从 panic 中恢复。recover 会从当前函数函数栈中返回最近的 panic 信息,并返回 interface{} 类型的 panic 值。

func main() {
  // 包装可能会产生 panic 的代码
  defer func() {
    if err := recover(); err != nil {
      // 处理 panic
      fmt.Println("recovered from panic:", err)
    }
  }()

  // 可能产生 panic 的代码
  panic("this will cause a panic")
}

实战案例

以下是一个从文件读取数据时处理 io.EOF

Utilisez la fonction récupérer pour récupérer de panique. recover renverra les dernières informations panic de la pile de fonctions de fonction actuelle et renverra une valeur de panique de type interface{}. 🎜
package main

import (
  "fmt"
  "io"
  "os"
)

func main() {
  f, err := os.Open("data.txt")
  if err != nil {
    panic(err)
  }
  defer f.Close()

  defer func() {
    if err := recover(); err != nil {
      if err == io.EOF {
        fmt.Println("reached end of file")
      } else {
        panic(err)
      }
    }
  }()

  // 读取数据
  data := make([]byte, 1024)
  for {
    n, err := f.Read(data)
    if err != nil {
      if err == io.EOF {
        // 达到文件末尾,正常退出
        break
      } else {
        // 其他错误,引发 panic
        panic(err)
      }
    }
    // 处理读取到的数据
  }
}
🎜Cas pratique🎜🎜Voici un exemple de gestion de l'exception io.EOF lors de la lecture de données à partir d'un fichier : 🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn