ホームページ > バックエンド開発 > Golang > Go プログラマはどのようにして複数のエラーを同時に効率的に管理できるのでしょうか?

Go プログラマはどのようにして複数のエラーを同時に効率的に管理できるのでしょうか?

DDD
リリース: 2024-11-28 21:51:11
オリジナル
368 人が閲覧しました

How Can Go Programmers Efficiently Manage Multiple Errors Concurrently?

Go で複数のエラーを同時に管理する

Go では、エラー処理は不可欠な練習です。ただし、各エラーには明示的なチェックと処理が必要になるため、複数のエラーを処理するとコードが冗長になる可能性があります。この記事では、テキストを cat にパイプする不自然な例を検討し、複数のエラーを効率的に管理する問題に対処します。

例でのエラーの処理

提供される例では、exec.Command を使用してデータをパイプします。 cat を実行して出力を読み取ります。元のコードの各行には、エラー処理専用の 3 つの追加行が含まれており、その結果、かなりの量のエラー処理コードが作成されます。

慣用的なアプローチ

コードの可読性を損なうことなく、責任を持ってエラーを処理するよう努めています。 。慣用的な解決策は次のとおりです:

package main

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

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
    }
    err = cmd.Start()
    if err != nil {
        return "", err
    }
    _, err = io.WriteString(stdin, input)
    if err != nil {
        return "", err
    }
    err = stdin.Close()
    if err != nil {
        return "", err
    }
    all, err := ioutil.ReadAll(stdout)
    output := string(all)
    if err != nil {
        return output, err
    }
    return output, 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)
}
ログイン後にコピー

分析

このリファクタリングされたコードは、より簡潔な方法でエラー処理を利用しています:

  • パイプ関数は、次の内容を含むタプルを返すようになりました。出力とエラーがある場合はエラー。
  • main 関数はパイピングを呼び出し、エラーを直接返します。
  • エラーが発生した場合は、コンソールに出力され、プログラムは終了します。

結論

このアプローチを採用することで、効果的に不必要なコードの重複を発生させずに複数のエラーを処理します。この手法により、コードの可読性が向上し、適切なエラー処理が保証されながら定型文が削減されます。

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

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