Golang でパニックから回復するにはどうすればよいですか?

WBOY
リリース: 2024-06-01 18:44:00
オリジナル
936 人が閲覧しました

Go では、関数スタックから最新のパニック値を返す回復関数を使用してパニックから回復します。実際の戦闘では、たとえば、ファイルを開いて defer を使用してパニックをキャッチすることができます。パニックが io.EOF と等しい場合は、通常どおり終了します。そうでない場合は、パニックが発生します。

如何在 Golang 中从 panic 中恢复?

Golang でパニックから回復するにはどうすればよいですか?

Golang では、panic によりプログラムが異常終了します。 panic は回復不可能なエラーの処理に役立ちますが、回復して実行を継続したい場合もあります。 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

パニックから回復するには、recover 関数を使用します。 recover は、現在の関数関数スタックから最新の panic 情報を返し、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)
      }
    }
    // 处理读取到的数据
  }
}
ログイン後にコピー
🎜実際的なケース🎜🎜 以下は、ファイルからデータを読み取るときに io.EOF 例外を処理する例です。

以上がGolang でパニックから回復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート