在 Go 语言(Golang)中,错误处理是一个非常重要的概念。Go 通过返回值来报告错误,这意呀着函数可以返回多个值,其中一个值用于表示操作是否成功执行,而另一个(或多个)值则用于在出错时提供错误信息。
error
类型的值,用于指示是否发生了错误。调用者应该检查这个返回值以确定是否发生了错误。 func someFunction() (result int, err error) {
// ... 函数逻辑
if someCondition {
return 0, errors.New("some error occurred")
}
return 1, nil
}
result, err := someFunction()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Result:", result)
error
接口(即包含一个 Error()
方法)来自定义错误。 type MyError struct {
Code int
Message string
}
func (e *MyError) Error() string {
return fmt.Sprintf("error code %d: %s", e.Code, e.Message)
}
func someFunction() (*MyError, int) {
// ... 函数逻辑
if someCondition {
return &MyError{Code: 1, Message: "some specific error"}, 0
}
return nil, 1
}
err, result := someFunction()
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Result:", result)
使用 errors
包:
Go 标准库中的 errors
包提供了创建和处理错误的实用功能,比如 errors.New()
用于创建一个简单的错误值。
错误包装:
Go 1.13 引入了错误包装(Error Wrapping)功能,允许你将一个错误包装在另一个错误内部,这有助于错误溯源和提供更多的上下文信息。%w
动词用于 fmt.Errorf
来包装错误。
func wrapError(err error) error {
return fmt.Errorf("wrapped: %w", err)
}
err := errors.New("original error")
wrappedErr := wrapError(err)
fmt.Println(wrappedErr)
// 使用 errors.Is 或 errors.As 来检查和提取原始错误
errors.Is
和 errors.As
函数可以用来检查错误链中的特定错误。errors
包提供的函数和类型来处理错误。通过遵循这些最佳实践,你可以编写出更健壮、更易于维护和调试的 Go 程序。
上一篇: Golang 语言接口
下一篇: Golang 并发