3

ファイルやデータベースを開いたり閉じたり、書き込みや読み取りを実行したりする大きなプログラムを作成しました。「go の例外処理」というものがないので、「defer」ステートメントと「recover()」関数についてよく知らなかったので、ファイルのオープン、読み書き、データベース エントリのたびにエラー チェックを適用しました。など。

_,insert_err := stmt.Run(query)
if insert_err != nil{
    mylogs.Error(insert_err.Error())
    return db_updation_status
}

このため、最初に db_updation_status を "false" として定義し、プログラムのすべてがうまくいくまで "true" にしないようにしています。私はすべての関数でこれを行いました。失敗する可能性があると思われるすべての操作の後です。

defer-panic-recover を使用してこれを行うためのより良い方法があると思いますか? ここでこれらについて読んだhttp://golang.org/doc/articles/defer_panic_recover.htmlが、それらの使用方法を明確に理解できません。これらの構造は、例外処理に似たものを提供しますか? これらの構成要素がなくてもよいのでしょうか? 誰かがこれを簡単な言葉で説明してくれたり、これらの構造の使用例を提供して、上で使用したエラー処理のタイプと比較したりしてくれれば、本当にありがたいです。

4

3 に答える 3

1

呼び出し元にエラーを報告する通常の方法は、追加の戻り値としてエラーを返すことです。正規の Read メソッドはよく知られているインスタンスです。バイト数とエラーを返します。しかし、エラーが回復不能な場合はどうなるでしょうか? 時々、プログラムは単に続行できません。この目的のために、プログラムを停止させる実行時エラーを実際に作成する組み込み関数の panic があります (ただし、次のセクションを参照してください)。この関数は、任意の型 (多くの場合文字列) の引数を 1 つ取り、プログラムの終了時に出力します。また、無限ループから抜け出すなど、不可能なことが起こったことを示す方法でもあります。

http://golang.org/doc/effective_go.html#errors

于 2013-06-08T05:26:36.713 に答える