ホームページ > バックエンド開発 > Golang > Go で複数のエラーを効率的に処理するにはどうすればよいですか?

Go で複数のエラーを効率的に処理するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-30 07:22:11
オリジナル
629 人が閲覧しました

How Can I Efficiently Handle Multiple Errors in Go?

Go での複数のエラーの処理

Go でのエラー処理では、エラーが発生した場所の明示的なチェックに重点を置いています。ただし、単一のブロックで複数のエラーを処理する場合、コードが冗長になる可能性があります。

次の不自然な例を考えてみましょう:

package main

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

func main() {
    cmd := exec.Command("cat", "-")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        return
    }
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        return
    }
    err = cmd.Start()
    if err != nil {
        return
    }
    _, err = io.WriteString(stdin, "Hello world!")
    if err != nil {
        return
    }
    err = stdin.Close()
    if err != nil {
        return
    }
    output, err := ioutil.ReadAll(stdout)
    if err != nil {
        return
    }
    fmt.Println(string(output))
    return
}
ログイン後にコピー

エラーを処理する各行には、さらに 3 行のコードが追加されます。これらのエラーの多くは致命的ではないか、別の場所で処理されるため、ボイラープレートの増加につながります。

慣用的なエラー処理

慣用的なアプローチの 1 つは、関数からエラーを返し、呼び出しコードで明示的に処理します。

package main

import (
    "fmt"
    "os"

    "errors"
)

func piping(input string) (string, error) {
    cmd := exec.Command("cat", "-")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        return "", err
    }
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        return "", err
    }
    if err = cmd.Start(); err != nil {
        return "", err
    }
    if _, err = io.WriteString(stdin, input); err != nil {
        return "", err
    }
    if err = stdin.Close(); err != nil {
        return "", err
    }
    all, err := ioutil.ReadAll(stdout)
    if err != nil {
        return "", err
    }
    return string(all), nil
}

func main() {
    in := "Hello world!"
    fmt.Println(in)
    out, err := piping(in)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    fmt.Println(out)
}
ログイン後にコピー

この例では、piping() は出力と任意の出力の両方を返します。エラーが発生しました。呼び出し元のコードは、必要に応じてエラーを処理したり、エラーを伝播したりできます。

Go でのエラー処理

Go では、明示的なエラー処理が不可欠です。明示的な if err != nil チェックにより、プログラマはエラーを即座に処理し、予期しないプログラム動作を引き起こす可能性のある未処理エラーを回避することができます。

このアプローチは場合によってはコードが冗長になる可能性がありますが、規律あるアプローチを促進します。エラー処理と保守性。

以上がGo で複数のエラーを効率的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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