Go でのエラー処理のベスト プラクティスには、エラー タイプの使用、常にエラーを返す、エラーのチェック、複数値の戻り値の使用、センチネル エラーの使用、およびエラー ラッパーの使用が含まれます。実用的な例: HTTP リクエスト ハンドラーで、ReadDataFromDatabase がエラーを返した場合は、500 エラー応答を返します。
Go 関数でのエラー処理のベスト プラクティス
Go では、堅牢で信頼性の高いアプリケーションを構築するために、エラーの処理が重要です。重要。エラーを効率的に処理するためのベスト プラクティスをいくつか紹介します。
error
タイプを使用する
Go には組み込みの error が用意されています。
エラーを表すために使用されるタイプ。これは、任意の型で実装できるインターフェイスであり、カスタム エラー タイプを作成できます。
package errors type MyError struct { msg string } func (e MyError) Error() string { return e.msg }
エラーを返す
関数の名前が関数が失敗する可能性を示していない場合でも、常にエラーを返します。これにより、呼び出し元は関数が正常に実行されたかどうかを判断できるようになります。
func ReadFile(filename string) (string, error) { data, err := ioutil.ReadFile(filename) return data, err }
エラーのチェック
エラーをチェックするには、if err != nil
ステートメントを使用します。エラーが発生した場合は、エラーをログに記録するか、呼び出し元にエラーを返すなど、適切なアクションを実行してください。
func main() { data, err := ReadFile("data.txt") if err != nil { log.Fatal(err) } }
複数値の戻り値を使用する
失敗する可能性のある操作に対して複数の値を返す必要がある場合は、複数値の戻り値を使用できます。最初に返される値は実際の結果であり、2 番目に返される値はエラーです。
func Divide(a, b int) (float64, error) { if b == 0 { return 0, errors.New("division by zero") } return float64(a) / float64(b), nil }
センチネル エラーの使用
センチネル エラーは、特定の種類の障害を示すために使用される事前定義されたエラー値です。これは、この種のエラーを簡単に検出して処理するのに役立ちます。
var ErrNotFound = errors.New("not found")
エラー ラップの使用
追加のコンテキストを提供するためにエラーをラップする必要がある場合は、fmt.Errorf
または errors を使用します。ラップ
関数。これにより、より説明的でわかりやすいエラー メッセージを作成できます。
func ReadFileFromRemote(filename string) (string, error) { data, err := ReadFileFromCache(filename) if err != nil { return "", fmt.Errorf("failed to read from cache: %w", err) } return data, nil }
実用的なケース: HTTP リクエストのエラー処理
HTTP リクエスト ハンドラーでこれらのベスト プラクティスを使用する方法を示す例を次に示します:
package main import ( "fmt" "net/http" ) // 处理传入的 HTTP 请求 func handler(w http.ResponseWriter, r *http.Request) { data, err := ReadDataFromDatabase(r) if err != nil { // 返回一个带有 500 错误代码的错误响应 http.Error(w, err.Error(), http.StatusInternalServerError) return } // 处理成功请求并返回响应 }
これらのベスト プラクティスに従うことで、エラーを効果的に処理および報告する堅牢で信頼性の高い Go コードを作成できるため、アプリケーションの安定性とユーザー エクスペリエンスが向上します。
以上がgolang 関数でのエラー処理のベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。