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

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}

  

猜你喜欢

转载自www.cnblogs.com/yunweiqiang/p/12164282.html