GO语言异常处理03---自定义异常

时间:2024-04-26 03:07:45
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}