ベスト プラクティス: エラーが検出されない場合でも、呼び出し元が応答できるように、常にエラーを返します。 Sentinel エラー値を使用して、特定の種類のエラーを表し、可読性を高めます。ラップされたエラーを使用して元のエラー メッセージを強化し、デバッグを容易にします。 defer を使用すると、パニックやエラーが発生した場合でもリソースが確実に解放されます。実際のケース: CalculateAverage 関数は平均値またはエラーを返します。配列が空の場合は、ErrNoNumbers エラーが返されます。配列に負の数値が含まれている場合は、フォーマットされたエラーが返されます。それ以外の場合は、平均値が返されます。
Go 言語では、エラー処理は重要なタスクであり、エラーを適切に処理し、予期せぬエラーを回避するのに役立ちます。行動。関数エラー処理のベスト プラクティスは次のとおりです。
1. 常にエラーを返す
関数は、エラーが検出されない場合でも、常にエラーを返す必要があります。 。これにより、発信者は実際の状況に基づいて応答できるようになります。例:
func ParseJSON(input []byte) (map[string]interface{}, error) { var data map[string]interface{} if err := json.Unmarshal(input, &data); err != nil { return nil, err } return data, nil }
2. Sentinel エラー値の使用
Sentinel エラー値は、特定の種類のエラーを表すために使用できる特別な値です。これにより、エラー処理がより簡潔で読みやすくなります。例:
var ErrInputTooLong = errors.New("input is too long")
3. ラップされたエラーの使用
ラップされたエラーを使用すると、コンテキスト情報を追加して元のエラー メッセージを強化できます。これは、デバッグやエラーの根本原因の理解に役立ちます。例:
func OpenFile(path string) (*os.File, error) { file, err := os.Open(path) if err != nil { return nil, fmt.Errorf("failed to open file %s: %w", path, err) } return file, nil }
4. defer
defer
ステートメントを使用すると、パニックが発生した場合でもリソースを確実に解放できます。またはエラー。これは、ファイルを閉じたり、メモリを解放したりする場合に重要です。例:
file, err := os.Open("data.txt") if err != nil { return nil, err } defer file.Close()
実際のケース:
これらのベスト プラクティスを使用した実際のケースを見てみましょう:
func CalculateAverage(numbers []int) (float64, error) { if len(numbers) == 0 { return 0, ErrNoNumbers } sum := 0 for _, number := range numbers { if number < 0 { return 0, fmt.Errorf("invalid number %d: must be non-negative", number) } sum += number } return float64(sum) / float64(len(numbers)), nil } // 主函数 func main() { numbers := []int{1, 2, 3, 4, 5} average, err := CalculateAverage(numbers) if err != nil { fmt.Println("Error:", err) } else { fmt.Println("Average:", average) } }
これらのベスト プラクティスに従ってください。 、関数のエラー処理が堅牢かつ保守可能であることを保証できます。
以上がgolang 関数のエラー処理のベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。