自定义错误是那些可以由用户定义的错误。例如,如果编写了一个用于对两个数字进行除法的函数,该函数将在多个地方使用,则用户可以创建一个自定义错误,该错误可以在遇到被零除时设置,因为它可能被证明是致命的长期来说。
在 Golang 中创建自定义错误的最简单方法是使用New()函数,该函数存在于 Golang 的错误模块中。在实际开始创建我们自己的错误之前,让我们看看它是如何在错误包中实现的。
package errors
// New returns an errorString
// that contains the input
// text as its value.
func New(text string) error {
return &errorString{text}
}
// errorString is a trivial
// implementation of error.
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
因此,基本上 New()函数所做的就是使用可由程序员编写的自定义消息创建错误。例如,假设我们希望每当给定一个负值作为输出正方形面积的程序的输入时显示错误,给定它的边。
package main
// the errors package
// contains the New function
import (
"errors"
"fmt"
)
func main() {
side := -2.0
if side < 0.0 {
// control enters here if error condition is met
fmt.Println(errors.New("Negative value entered!"))
return
}
fmt.Printf("Area= %f", side*side)
}
输出:
Negative value entered!
这是因为我们输入的边长为 -2,这是不可能的,因此抛出了错误。现在让我们尝试一个类似的程序,但这次让我们将错误生成放在一个单独的函数。
package main
import (
"errors"
"fmt"
)
func findAreaSquare(side float64) (error, float64) {
if side < 0.0 {
// function that returns the error
// as well as the computed area
return errors.New("Negative value entered!"), 0
}
return nil, side * side
}
func main() {
side := -2.0
err, area := findAreaSquare(side)
if err != nil {
fmt.Printf("%s", err)
return
}
fmt.Printf("Area= %f", area)
}
输出:
Negative value entered!