除了上面的 errors.New 用法之外,我们还可以实现 error 接口自定义一个 Error() 方法,来返回自定义的错误信息。
在 Go 语言中可没有像 Java、PHP、C# 等这些编程,使用 try、catch 来处理程序在运行时产生异常。
Go 内置了一个 error 接口。
type errror interface {
Error() string
}
package main
import (
"errors"
"fmt"
"math"
)
func Sqrt(f float64) (float64, error) {
if f < 0 {
//使用 New() 函数返回一个新的 error
return -1, errors.New("math: square root of negative number")
}
return math.Sqrt(f), nil
}
func main() {
result, err := Sqrt(-7)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}
自定义错误类型
除了上面的 errors.New 用法之外,我们还可以实现 error 接口自定义一个 Error() 方法,来返回自定义的错误信息。
package main
import (
"fmt"
"math"
)
type myError struct {
Num float64
message string
}
func (e myError) Error() string {
return fmt.Sprintf("出现错误:%.0f 为负数", e.Num)
}
func Sqrt(f float64) (float64, error) {
if f < 0 {
return -1, myError{Num: f}
}
return math.Sqrt(f), nil
}
func main() {
result, err := Sqrt(-13)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}