golang 関数のエラー処理のベスト プラクティス

PHPz
リリース: 2024-05-03 22:21:02
オリジナル
1039 人が閲覧しました

ベスト プラクティス: エラーが検出されない場合でも、呼び出し元が応答できるように、常にエラーを返します。 Sentinel エラー値を使用して、特定の種類のエラーを表し、可読性を高めます。ラップされたエラーを使用して元のエラー メッセージを強化し、デバッグを容易にします。 defer を使用すると、パニックやエラーが発生した場合でもリソースが確実に解放されます。実際のケース: CalculateAverage 関数は平均値またはエラーを返します。配列が空の場合は、ErrNoNumbers エラーが返されます。配列に負の数値が含まれている場合は、フォーマットされたエラーが返されます。それ以外の場合は、平均値が返されます。

golang 関数のエラー処理のベスト プラクティス

Golang 関数エラー処理のベスト プラクティス

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 サイトの他の関連記事を参照してください。

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