Go 语言通过内置的 error
接口来处理错误,该接口定义如下:
type error interface {
Error() string
}
这意味着任何实现了 Error()
方法的类型都可以作为错误类型。在 Go 中,通常使用 errors
包的 New
函数来创建简单的错误:
package main
import (
"errors"
"fmt"
)
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Result:", result)
}
通过自定义两个错误变量,有利于判断错误类型
通常我们判断是否存在错误而不是判断不存在错误,有利于尽早失败避免嵌套
package main
import (
"errors"
"fmt"
)
var DivisionByZero = errors.New("除0错误")
var LessThanZero = errors.New("小于0错误")
func divide(a, b int) (int, error) {
if b == 0 {
return 0, DivisionByZero
}
if a < 0 {
return 0, LessThanZero
}
return a / b, nil
}
func main() {
result, err := divide(-1, 10)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Result:", result)
}
源码分析看error类型:只需要实现Error方法就满足error接口的要求即为一个错误类
errors包内的一部分,定义了New函数和一个errorString错误类型,用于快速创建和表示简单的错误。
New
函数是一个工厂函数,用于创建一个新的错误。它接受一个字符串参数 text
,该字符串表示错误的文本描述。每次调用 New
都会返回一个新的错误对象,即使传递相同的文本描述,它们也是不同的错误对象。
errorString
类型:errorString
是一个简单的实现了 error
接口的类型,它只有一个字符串字段 s
表示错误的文本描述