Golang は、言語レベルで優れたエラー処理メカニズムを提供する、厳密に型指定されたプログラミング言語です。エラー処理は Golang 開発プロセスの重要な部分であり、その設計コンセプトは、エラー処理をコードやビジネス ロジックから分離して、より読みやすく保守しやすいコードを実現することです。
Golang では、エラー メカニズムの基礎は組み込み型 - error
です。 error
は Golang のインターフェイス タイプで、エラー情報を返すために使用されるメソッド Error()
を定義します。 error
予期される例外は、関数の戻り値として、または他の関数の呼び出しへのパラメーターとして呼び出し元に渡すことができます。
関数でエラーが発生すると、エラー情報を含む非 nil error
オブジェクトが返されます。呼び出し元は、返されたエラーを確認することで、関数が正常に実行されたかどうかを判断できます。 nil が返された場合は関数の実行が成功したことを意味し、それ以外の場合は関数の実行が失敗したことを意味します。
以下では、Golang での一般的なエラー処理メカニズムとテクニックをいくつか紹介します:
defer
メカニズムを使用して、関数の実行は、関数が返されるまで実行されません。 defer
リソースの解放、ファイルのクローズ、バッファのクリアなどの操作によく使用されます。 recover
は、[panic
](https://tour.golang.org/basics/13) の後にプログラム制御フローを復元し、プログラムが正常に実行を継続できるようにするために使用されます。これは defer
でのみ呼び出すことができ、それ以外の場合は機能しません。
Golang では、defer
および recover
メカニズムを使用してエラー処理を実装できます。つまり、defer# で
recover# を使用します。 ## ステートメント ##関数の実行中に生成されたエラー情報を取得するには、エラーの種類を判断し、それに応じて処理します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>func processFile(filename string) error {
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
// Read the file here...
return nil
}
func main() {
err := processFile("/path/to/myfile.txt")
if err != nil {
// Handle the error here...
fmt.Println(err)
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
上記のコードでは、最初にファイルを開こうとしていますが、開くときにエラーが発生した場合はエラーが返され、次に
; でファイルを閉じ、最後に nil
関数が正常に実行されたことを示す戻り値。 main 関数で、呼び出し関数が非 nil エラーを返した場合、それは関数の実行が失敗したことを意味するため、対応するエラー処理操作を実行する必要があります。 2. カスタム エラー タイプ
メソッドを実装することでエラー タイプをカスタマイズできます。カスタム エラー タイプを使用すると、コードが読みやすくなり、エラーの可能性が減りますが、同時にコードの再利用性も向上します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>type customError struct {
message string
code int
}
func (e *customError) Error() string {
return fmt.Sprintf("%s [%d]", e.message, e.code)
}
func processFile(filename string) error {
file, err := os.Open(filename)
if err != nil {
return &customError{"Error opening file", 1001}
}
defer file.Close()
// Read the file here...
return nil
}
func main() {
err := processFile("/path/to/myfile.txt")
if err != nil {
// Handle the error here...
fmt.Println(err)
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
上記のコードでは、エラー メッセージとエラー コードを含むカスタム エラー タイプ
を実装しました。 processFile()
関数では、ファイルを開けない場合、customError
オブジェクトが返されます。 main 関数でエラーが発生した場合は、Error()
メソッドを呼び出してエラー情報を取得します。 3. エラー処理のベスト プラクティス
以上がgolangのエラーキャッチの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。