Go で関数のエラーを適切に処理するには、次のトリックが必要です: if err != nil を使用してエラーをチェックします。エラー処理ロジックを分離し、defer ステートメントを使用します。センチネル エラーを使用して、既知のエラー タイプを表します。複数のタイプのエラーを処理するには、複数のエラー タイプを使用します。実際のケース: ファイルの読み取りおよび書き込み操作では、エラーをチェックして適切に処理することでコードの堅牢性を向上できます。
Go 関数のエラーを適切に処理する
Go では、エラーは error
型変数として表されます。堅牢で保守しやすいコードを作成するには、適切なエラー処理が不可欠です。次のヒントは、関数のエラーを適切に処理するのに役立ちます:
1. if err != nil
を使用する最も一般的なチェック方法です。エラーの場合 この方法では、以下に示すように if err != nil
を使用します。
func f() error { if err := g(); err != nil { return fmt.Errorf("g: %w", err) // 使用 %w 封装原始错误 } // 其余代码... return nil }
2 個別のエラー処理ロジック
関数をシンプルに保つために、エラー処理ロジックをビジネス ロジックから分離できます。 defer
ステートメントは、次のように関数が戻る前にエラーを処理するために使用されます:
func f() (err error) { defer func() { if r := recover(); r != nil { // 捕获恐慌并将其转换为错误 err = fmt.Errorf("panic: %v", r) } }() g() return }
3. センチネル エラーの使用
センチネル エラーは次のとおりです。特殊なエラー。特定の種類のエラー状態を表すために使用されます。これにより、以下に示すように、エラー チェックが簡単になります:
func f() error { if err := g(); err == sentinelError { return nil // 忽略已知的错误 } return err }
4. 複数のエラー タイプの使用
関数が複数のタイプのエラーを生成する可能性がある場合、複数のエラーを使用できます。タイプ。 errors.NewMultiError()
この関数を使用すると、以下に示すように、複数のエラーを含むエラーを作成できます。
func f() error { var errs []error if err := g(); err != nil { errs = append(errs, err) } if err := h(); err != nil { errs = append(errs, err) } if len(errs) > 0 { return errors.NewMultiError(errs...) } return nil }
実践例: ファイルの読み取りと書き込み
次のコード例は、ファイルの読み取りおよび書き込み時にエラーを適切に処理する方法を示しています。
package main import ( "fmt" "io/ioutil" ) func main() { data, err := ioutil.ReadFile("data.txt") if err != nil { fmt.Printf("ReadFile: %v", err) return } err = ioutil.WriteFile("data-copy.txt", data, 0644) if err != nil { fmt.Printf("WriteFile: %v", err) return } }
上記のヒントを使用すると、Go 関数でエラーを適切に処理でき、コードの堅牢性と可読性が向上します。保守性。
以上がgolang 関数がエラーを適切に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。