ホームページ  >  記事  >  バックエンド開発  >  Go は、単一のステートメント内でエラーを処理するための標準または事実上の方法 (つまり、インライン エラー処理) を提供していますか?

Go は、単一のステートメント内でエラーを処理するための標準または事実上の方法 (つまり、インライン エラー処理) を提供していますか?

王林
王林転載
2024-02-09 22:50:10478ブラウズ

Go 是否提供了标准或事实上的方法来处理单个语句中的错误(即内联错误处理)?

Go 言語には、単一のステートメント内のエラーを処理する標準または事実上の方法、つまりインライン エラー処理が提供されていますか?これは多くの Go 言語初心者からよく聞かれる質問です。答えは「はい」です。Go 言語は、単一のステートメントでエラーを処理するための簡潔かつ効果的な方法を提供します。 Go 言語では、関数の複数の戻り値機能と組み合わせて、if ステートメントの短い宣言形式を使用して、インライン エラー処理を実装できます。このアプローチは簡潔かつ柔軟であり、コードの読みやすさと保守性を向上させることができます。同時に、Go 言語は、より複雑なエラー シナリオを処理するためのいくつかの標準ライブラリ関数とエラー処理関数も提供します。全体として、Go 言語は、単一のステートメントでエラーを処理するための完全で使いやすい方法を提供します。

質問の内容

Rust では、Result 型は Go の (val, err) パターンと考えることができます。このステートメントは即座に「展開」され、このタスク専用に複数の行を割り当てる複雑さは必要ありません。たとえば、数値またはエラーを返す関数 foo があるとします。 Rust では、このエラーを (無視せずに) 処理するのは次のように簡単です。 リーリー

Go では、推奨されるアプローチは次のようです:

リーリー

Go は、Rust のように 1 つのステートメントでエラーを即座に処理する

標準 方法を提供しますか?それとも自家製のソリューションを使い続ける必要がありますか?

私の一時的な解決策は次のとおりです:

リーリー

あまりの多さに少し驚いています。リンクされている 5 つの質問はどれも重複しておらず、私の質問に明確に答えているものはありません。まったく関係がないと思われる場合もあります。タイトルの表現が間違っていたためだと思います。実際の問題にもっと関連するようにタイトルを書き直しました。ありがたいことに、u/norbjd は私の質問に適切に答えてくれました。

回避策

@mkopriva がコメントで述べたように、Go にはこれを行う組み込みの方法はありません。ただし、このパターンは多くのライブラリで

Must: という名前で見つかります。

    テキスト/テン​​プレート
  • 内: 必須
  • regexp
  • 内: コンパイルする必要があります net/netip
  • 内:
  • MustParseAddr ###等### Go には、汎用の
  • must.Do
  • メソッド
  • を追加するという
公開提案がありますが、まだ具体的な内容はありません。

現在推奨されているアプローチは、次のように、ジェネリックスを使用してコード内で Must メソッドを定義することです (Go 1.18 以降)。 リーリー そして次のように使用します:

リーリー

このメソッドを提供するライブラリ (wingyplus/must

など) を作成する試みがありましたが、リポジトリが指摘しているように、Go の哲学に基づいています。

したがって、各プロジェクトで独自のメソッドを定義することも、

Must (統合される場合) が Go 標準ライブラリに統合されるまで、これらのタイプのライブラリを使用することもできます。

以上がGo は、単一のステートメント内でエラーを処理するための標準または事実上の方法 (つまり、インライン エラー処理) を提供していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。