zoukankan      html  css  js  c++  java
  • 异常处理

     

    【暴力处理】恐慌异常处理

     1 //【暴力方式】求球的体积
     2 //半径如果为负数,直接panic
     3 
     4 package main
     5 
     6 import (
     7     "fmt"
     8     "math"
     9 )
    10 
    11 //球的函数 面积公式
    12 func GetToyBallVolumn(radius float64) float64 {
    13 
    14     //【模拟恐慌】就是定义报错内容,让程序崩掉,抛出异常.
    15     if radius < 0 {
    16         panic("小球半径不能为负数...")
    17     }
    18 
    19     return (4 / 3.0) * math.Pi * math.Pow(radius, 3)
    20 }
    21 
    22 func main() {
    23 
    24     //【处理恐慌】从恐慌中复活,找到恐慌的原因,在函数结束之前,处理恐慌
    25     defer func() {
    26         if err := recover(); err != nil {
    27             fmt.Println("致死的原因是: ", err)
    28         }
    29 
    30     }()
    31 
    32     //因为传递了负数半径死于此处.
    33     volumn := GetToyBallVolumn(-1)
    34     fmt.Println("球的体积是: ", volumn)
    35 
    36 }
    37 
    38 /*
    39 致死的原因是:  小球半径不能为负数...
    40  */

    [温和处理]错误和处理

     1 //【温和方式报错】半径如果不在取值范围内,温和地返回【结果-错误】
     2 
     3 package main
     4 
     5 import (
     6     "errors"
     7     "fmt"
     8     "math"
     9 )
    10 
    11 //球的函数 面积公式
    12 func GetToyBallVolumn(radius float64) (volumn float64, err error) {
    13 
    14     //【模拟恐慌】就是定义报错内容,让程序崩掉,抛出异常.
    15     if radius < 0 {
    16         panic("小球半径不能为负数...")
    17     }
    18 
    19     //半径如果不在取值范围内,温和的返回错误.
    20     if radius < 5 || radius > 50 {
    21         err = errors.New("合法的半径范围是[5-50]")
    22         return
    23     }
    24 
    25     return (4 / 3.0) * math.Pi * math.Pow(radius, 3), nil
    26 }
    27 
    28 func main() {
    29     volumn, err := GetToyBallVolumn(1)
    30     if err != nil {
    31         fmt.Println("获取体积失败:", err)
    32         return
    33     }
    34     fmt.Println("小球的体积是,", volumn)
    35 }
    36 /*
    37 获取体积失败: 合法的半径范围是[5-50]
    38 
    39  */

    自定义错误

     1 package main
     2 
     3 import (
     4     "fmt"
     5     "math"
     6 )
     7 
     8 //自定义异常InvalidRadiusError
     9 type InvalidRadiusError struct {
    10     //非法半径
    11     Radius float64
    12     //可接受最小半径
    13     MinRadius float64
    14     //可接受最大半径
    15     MaxRadius float64
    16 }
    17 
    18 func (ire *InvalidRadiusError) Error() string {
    19     //Sprintf的意思是不打印内容,把结果返回给变量,自己知道怎么用.
    20     info := fmt.Sprintf("%.2f是非法半径,合法半径的范围是[%.2f,%.2f]
    ", ire.Radius, ire.MinRadius, ire.MaxRadius)
    21     return info
    22 }
    23 
    24 //工厂方法
    25 func NewInvalidRadiusError(radius float64) *InvalidRadiusError {
    26     ire := new(InvalidRadiusError)
    27     ire.MinRadius = 5
    28     ire.MaxRadius = 50
    29     ire.Radius = radius
    30     return ire
    31 }
    32 
    33 //球的函数 面积公式
    34 func GetToyBallVolumn(radius float64) (volumn float64, err error) {
    35 
    36     //【模拟恐慌】就是定义报错内容,让程序崩掉,抛出异常.
    37     if radius < 0 {
    38         panic(NewInvalidRadiusError(radius))
    39     }
    40 
    41     //半径如果不在取值范围内,温和的返回错误.
    42     if radius < 5 || radius > 50 {
    43         err = NewInvalidRadiusError(radius)
    44         return
    45     }
    46 
    47     return (4 / 3.0) * math.Pi * math.Pow(radius, 3), nil
    48 }
    49 
    50 func main() {
    51 
    52     //解决恐慌问题,避免程序报错退出。
    53     defer func() {
    54         if err := recover();err !=nil{
    55             fmt.Println(err)
    56         }
    57     }()
    58 
    59 
    60     volumn, err := GetToyBallVolumn(-1)
    61     if err != nil {
    62         fmt.Println("获取体积失败:", err)
    63         return
    64     }
    65     fmt.Println("小球的体积是,", volumn)
    66 }
    67 
    68 /*
    69 获取体积失败: 1.00是非法半径,合法半径的范围是[5.00,50.00]
    70 -1.00是非法半径,合法半径的范围是[5.00,50.00]
    71 
    72  */
  • 相关阅读:
    ruby 二进制转十进制 Integer("0b101") = 5
    开始菜单和我的文档的我的图片及我的音乐变成 my pictrues 正常图标了
    ruby watir 莫名其妙的错误
    Excel SaveAS是去掉提示框
    apache && jboss安装
    ruby require include的区别
    ruby控制鼠标
    This error is raised because the column 'type' is reserved for storing the class in case of inheritance
    用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
    ASP.NET 如何动态修改 Header 属性如添加 Meta 标签 keywords description!
  • 原文地址:https://www.cnblogs.com/chaoyangxu/p/11975973.html
Copyright © 2011-2022 走看看