自定错误,需要实现error()接口中的Error()方法
package main
import (
"fmt"
"math"
)
// 定义错误类型
type areaError struct {
msg string
radius float64
}
// 实现error接口,就是实现error接口中Error()方法
func (e *areaError) Error() string {
return fmt.Sprintf("error:半径,%.2f,%s", e.radius, e.msg)
}
func circleArea(radius float64) (float64, error) {
if radius < 0 {
return 0, &areaError{msg: "半径非法", radius: radius}
}
return math.Pi * radius * radius, nil
}
func main() {
radius := 3.5
area, err := circleArea(radius)
if err != nil {
fmt.Println(err)
if err, ok := err.(*areaError); ok {
fmt.Printf("半径是:%.2f\n", err.radius)
}
return
}
fmt.Println("面积:", area)
}