Golang で CustomError タイプを使用すると、関数内のエラーを適切に処理でき、次のことが可能になります。 詳細を提供するカスタム エラー メッセージ。エラーをカテゴリにグループ化するエラー分類。エラーの原因を追跡するのに役立つエラー スタック トレース。
#Golang の CustomError 型を使用して関数のエラーを適切に処理する方法
はじめに
Golang でのエラー処理は、堅牢で保守可能なコードを作成するために非常に重要です。標準のerror タイプ zwar を使用すると機能しますが、場合によっては、より詳細なエラー情報が必要になります。たとえば、次のとおりです。
CustomError タイプは、標準の
error タイプよりも高度な機能を提供するため、これらのニーズを満たすことができます。
CustomError タイプの作成
新しいerror タイプの作成は簡単です。必要なのは、
error インターフェイスを実装することだけです。
import ( "fmt" ) // CustomError 代表一个自定义错误类型 type CustomError struct { Message string Category string StackTrace []uintptr } // Error() 实现 error 接口,返回错误信息 func (ce CustomError) Error() string { return fmt.Sprintf("Error: %s", ce.Message) }
CustomError 型の使用
新しいCustomError 型を使用して関数のエラーを処理できるようになりました。使用方法の手順は次のとおりです。
のインスタンスを作成し、カスタム エラーを提供します。エラーメッセージ、カテゴリ、スタックトラック。
値の代わりに、関数内で
CustomError インスタンスを返します。
または
errors.As() 関数を使用して、エラーの種類
CustomError の種類と一致しますか。
であると判断したら、型キャストを通じてカスタム エラー メッセージ、カテゴリ、およびスタック トレースにアクセスできます。
実際的なケース
ファイルを開いて読み取る次の関数を考えてみましょう:func readFile(filename string) (string, error) { data, err := ioutil.ReadFile(filename) if err != nil { return "", err } return string(data), nil }Using
CustomError タイプの場合、この関数はより豊富なエラー情報を提供できます:
import ( "fmt" "io/ioutil" "errors" ) // FileError 代表读取文件时可能发生的错误的自定义错误 type FileError struct { Message string Category string StackTrace []uintptr } // Error() 实现 error 接口,返回错误信息 func (fe FileError) Error() string { return fmt.Sprintf("Error: %s", fe.Message) } func readFile(filename string) (string, error) { data, err := ioutil.ReadFile(filename) if err != nil { // 创建 FileError 实例并返回 return "", FileError{ Message: fmt.Sprintf("Failed to read file: %s", filename), Category: "File Read Error", StackTrace: errors.Callers(1), } } return string(data), nil }これで、
readFile 関数が呼び出され、エラーが発生したときに、
errors.Is() ## を使用できます。 # または errors.As()
エラーのタイプが FileError
であるかどうかを確認し、カスタム エラー メッセージ、カテゴリ、スタック トレースにアクセスします: <pre class='brush:go;toolbar:false;'>data, err := readFile("non-existent.txt")
// 检查错误是否属于 FileError 类型
if errors.Is(err, FileError{}) {
// 类型转换以访问自定义错误信息和类别
fileError := err.(FileError)
fmt.Println("File Read Error:", fileError.Message)
fmt.Println("Category:", fileError.Category)
fmt.Println("StackTrace:", fileError.StackTrace)
} else {
fmt.Println("Unknown error:", err)
}</pre>
以上がgolang 関数のエラーを適切に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。