Golang は、誕生以来プログラマーに愛されてきた強力なプログラミング言語です。エラー処理メカニズムも Golang の非常に重要なモジュールです。この記事では、Golang のエラーの種類に焦点を当てます。
Golang では、エラー タイプは組み込みインターフェイス タイプのエラーを指します。定義するカスタム エラー タイプは、エラー タイプを使用して処理する前に、このインターフェイスを満たす必要があります。エラー タイプは次のように定義されます。
type error interface { Error() string }
エラー タイプには、文字列タイプのエラー メッセージを返す Error() メソッドというメソッドが 1 つだけあります。 Golang のすべてのエラー タイプは、エラー タイプとして使用する前にエラー インターフェイスを実装する必要があります。
カスタム エラー タイプに加えて、Golang はいくつかの一般的なエラー タイプも事前定義しています。
一般的なエラー タイプとは、追加情報を必要としないエラーを指します。 Golang では、errors.New() 関数を使用して通常のエラー タイプを作成できます。例:
import "errors" func divideByZero(a, b int) (int, error) { if b == 0 { return 0, errors.New("除数不能为0") } return a / b, nil }
上記のコードでは、除数が 0 の場合、文字列「除数を 0 にすることはできません」を含む一般的なエラー タイプが返されます。
カスタム エラー タイプとは、エラー メッセージに追加情報を追加する必要があるエラー タイプを指します。 Golang では、次の方法で定義できます。
type myError struct { Op string Operand string message string } func (e *myError) Error() string { return fmt.Sprintf("%s %s %s", e.Op, e.Operand, e.message) } func operate(a, b int, op string) (int, error) { if op != "+" && op != "-" && op != "*" && op != "/" { return 0, &myError{"operate", op, "不支持的操作"} } if op == "/" && b == 0 { return 0, &myError{"operate", op, "除数不能为0"} } var res int switch op { case "+": res = a + b case "-": res = a - b case "*": res = a * b case "/": res = a / b } return res, nil }
上記のコードでは、操作とエラーの情報を含むカスタム エラー タイプ myError を定義します。さらに、追加情報を含むエラー メッセージを返す Error() メソッドを実装しました。演算関数では、演算がサポートされていない場合、または除数が 0 の場合、カスタム エラー タイプが返されます。
Golang では、panic() 関数を使用して例外をスローします。この時点で、プログラムは実行を停止し、後続のコードは実行されません。実際には、panic() 関数の内部実装によってパニック エラー タイプが作成され、トリガーされます。例:
func factorial(n int) int { if n < 0 { panic("参数必须为非负整数") } if n == 0 { return 1 } return n * factorial(n-1) }
上記のコードでは、渡されたパラメーターが負の数値の場合、プログラムはパニック エラー タイプをスローし、実行を停止します。
プログラム内のエラー処理は非常に重要であり、プログラムの安定性とセキュリティを確保することができます。 Golang ではエラーの種類によって処理方法が異なるため、プログラマは実際の状況に応じて適切なエラーの種類を選択する必要があります。
以上がgolang のエラーの種類について説明する記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。