标签:interface 假设 oat 异常处理 imp 方式 最小 int 自定义
package main import ( "fmt" "time" ) /* type error interface { Error() string } */ func GetCircleAreaIII(radius float64) (area float64, err error) { //假设有效半径为[10,50] if radius > 10||radius < 50{ //return 0,errors.New("半径不能为负数") return 0,NewInvalidRadiusError(radius,10,50) } return 3.14*radius*radius,nil } /*封装,将异常的信息变得丰富,且高度自定义*/ type InvalidRadiusError struct { //非法半径 InvalidRadius float64 //合法的最小半径 MinValidRadius float64 //合法的最大半径 MaxValidRadius float64 //异常发生时间 errTime time.Time } /*异常被打印的方式*/ func (ire InvalidRadiusError)String() string { return fmt.Sprintf("InvalidRadiusError{%.2f是非法半径,合法半径的范围是[%.2f,%.2f],错误发生时间是%v}",ire.InvalidRadius,ire.MinValidRadius,ire.MaxValidRadius,ire.errTime) } /*实现error接口*/ func (ire *InvalidRadiusError)Error() string { return ire.String() } /*创建自定义异常工厂方法*/ func NewInvalidRadiusError(invalidRadius,minRadius,maxRadius float64) *InvalidRadiusError { ire := new(InvalidRadiusError) ire.InvalidRadius = invalidRadius ire.MaxValidRadius = maxRadius ire.MinValidRadius = minRadius ire.errTime = time.Now() return ire } func main() { //err := errors.New("异常信息") //fmt.Println(err) area, err := GetCircleAreaIII(-5) fmt.Println(area,err) }
输出
0 InvalidRadiusError{-5.00是非法半径,合法半径的范围是[10.00,50.00],错误发生时间是2020-01-07 23:15:21.2348002 +0800 CST m=+0.007000001}
标签:interface 假设 oat 异常处理 imp 方式 最小 int 自定义
原文地址:https://www.cnblogs.com/yunweiqiang/p/12164282.html