golang 関数のエラー処理のデバッグ スキル

PHPz
リリース: 2024-05-01 12:48:02
オリジナル
951 人が閲覧しました

Go 関数のエラー処理のデバッグ スキルには次のものが含まれます。 1. fmt.Println() を使用してエラー情報を出力します。 2. error.Unwrap() を使用してネストされたエラーをアンラップします。 3. log.Printf() を使用してエラー情報を記録します。 4. カスタム エラー タイプを作成して詳細なエラー情報を提供します。 5. アサーションを使用して実行時にエラーを確認します。

golang 関数のエラー処理のデバッグ スキル

Go 関数のエラー処理におけるデバッグのヒント

Go におけるエラー処理は非常に強力ですが、エラーのデバッグが非常に難しい場合があります。この記事では、関数のエラーを見つけて修正するのに役立ついくつかのテクニックを紹介します。

1. fmt.Println()

を使用する最も簡単な方法は、fmt.Println() を使用することです。エラーメッセージを出力します。これは迅速なデバッグに役立ちますが、運用コードでは実行しないでください。

package main

import (
    "fmt"
    "os"
)

func main() {
    f, err := os.Open("file.txt")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // ...
}
ログイン後にコピー

2. errors.Unwrap()

##errors.Unwrap() を使用すると、一連のエラーをアンラップできます。 。たとえば、関数が os.ErrNotExist エラーをスローした場合、周囲の関数で errors.Unwrap() を使用して、根本的なエラー (nil#) を取得できます。 ##。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>package main import ( &quot;errors&quot; &quot;fmt&quot; &quot;os&quot; ) func main() { f, err := os.Open(&quot;file.txt&quot;) if err != nil { if errors.Unwrap(err) == os.ErrNotExist { fmt.Println(&quot;file does not exist&quot;) } else { fmt.Println(err) } os.Exit(1) } // ... }</pre><div class="contentsignin">ログイン後にコピー</div></div>

3.

log.Printf()

log.Printf()

を使用します。これは、より高度なログです。関数はエラー情報をファイルまたはコンソールに書き込むことができます。これは実稼働コードでのデバッグに役立ちます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>package main import ( &quot;fmt&quot; &quot;log&quot; &quot;os&quot; ) func main() { f, err := os.Open(&quot;file.txt&quot;) if err != nil { log.Printf(&quot;failed to open file: %v&quot;, err) os.Exit(1) } // ... }</pre><div class="contentsignin">ログイン後にコピー</div></div>

4. カスタム エラー タイプを使用する

カスタム エラー タイプを使用すると、エラーに関する詳細情報が得られます。たとえば、ファイルが存在しないことを示す

FileNotFoundError

タイプを定義できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>package main import ( &quot;errors&quot; &quot;fmt&quot; &quot;os&quot; ) type FileNotFoundError struct { path string } func (e FileNotFoundError) Error() string { return fmt.Sprintf(&quot;file not found: %s&quot;, e.path) } func main() { f, err := os.Open(&quot;file.txt&quot;) if err != nil { if errors.Is(err, FileNotFoundError{}) { fmt.Println(&quot;file does not exist&quot;) } else { fmt.Println(err) } os.Exit(1) } // ... }</pre><div class="contentsignin">ログイン後にコピー</div></div>

5. アサーションを使用する

アサーションは、実行時にエラーをチェックし、エラーが発生したときにパニックを引き起こすのに役立ちます。

package main

import (
    "fmt"
    "io/ioutil"
    "os"
)

func main() {
    data, err := ioutil.ReadFile("file.txt")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // 将错误包装成 panic
    if len(data) == 0 {
        panic("empty file")
    }

    // ...
}
ログイン後にコピー

これらのヒントを使用すると、関数内のエラーをより簡単にデバッグできるようになり、コードの安定性と信頼性が向上します。

以上がgolang 関数のエラー処理のデバッグ スキルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!