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}

  

GO语言异常处理03---自定义异常的更多相关文章

  1. 第63课 C语言异常处理

    1. 异常的概念 (1)程序在运行过程中可能产生异常 (2)异常(Exception)与Bug的区别 ①异常是程序运行时可预料的执行分支 ②Bug是程序是的错误,是不被预期的运行方式 2. 异常和Bu ...

  2. JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别

    JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...

  3. Springboot的异常处理与自定义异常

    园友们好,元旦很快就到来了,提前祝各位园友们元旦快乐,今天给大家分享一个工作中必用一个知识点,就是使用枚举构建自定义异常并应用于springboot的异常处理器.开始之前我先把这个案例的结构大致说明一 ...

  4. go语言异常处理

    go语言异常处理 error接口 go语言引入了一个关于错误错里的标准模式,即error接口,该接口的定义如下: type error interface{ Error() string } 对于要返 ...

  5. c#基础之异常处理及自定义异常 从SQLServer转储数据到MySQL

    c#基础之异常处理及自定义异常 一.什么是c#中的异常? 异常是程序运行中发生的错误,异常处理是程序的一部分.c#中的异常类主要是直接或者间接的派生于 System.Exception类 ,也就是说S ...

  6. TZ_06_SpringMVC_异常处理,自定义异常

    1.SpringMVC异常处理的方式 . 2. 异常处理思路 1>. Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServle ...

  7. Go语言异常处理defer\panic\recover

    Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...

  8. PHP语言基础03 By ACReaper

    03.01逻辑运算符 &&,and ||,or xor 这里只强调一点用and或者or的话,记得加上括号,不然可能出错,至于原因我也不是很清楚,反正尽量直接用&&,|| ...

  9. 学JAVA第二十天,接触异常处理,自定义异常

    1.java.lang.NullPointerException(经常报)(运行时异常) 属于运行时异常,是编译器无法预知的异常,比如你定义了一个引用变量String a,但是你确没有用new关键字去 ...

  10. c#基础之异常处理及自定义异常

    一.什么是c#中的异常? 异常是程序运行中发生的错误,异常处理是程序的一部分.c#中的异常类主要是直接或者间接的派生于 System.Exception类 ,也就是说System.Exception类 ...

随机推荐

  1. Pytest系列(30)- 使用 pytest-xdist 分布式插件,如何保证 scope=session 的 fixture 在多进程运行情况下仍然能只运行一次

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 背景 使用 pytest-xdis ...

  2. 使用Docker及k8s启动logstash服务

    前提:搭建好elasticsearch和kibana服务 下载镜像,需要下载与elasticsearch和kibana相同版本镜像 docker pull docker.elastic.co/logs ...

  3. 【译】Android NDK API 规范

    [译]Android NDK API 规范 译者按: 修改R代码遇到Lint tool的报错,搜到了这篇文档,aosp仓库地址:Android NDK API Guidelines. 975a589 ...

  4. 功能:Java8新特性steam流

    Java8新特性steam流 一.包装数据类型 @Test public void main22() { List<Integer> list = new ArrayList<Int ...

  5. 【Nginx(二)】Nginx目录结构和常用的命令以及核心配置文件

    Nginx的目录结构: 默认的安装路径 : /usr/local/nginx 安装完成后,Nginx的目录结构如下: conf:   #所有配置文件的目录 nginx.conf  #默认的主要配置文件 ...

  6. 数据库的读写分离(Amoeba)

    目录 Amoeba Amoeba读写分离的配置 Amoeba Amoeba(变形虫) 项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件. 这个软件基于Java致力于MyS ...

  7. c# 通过 p/invoke 使用 c的加密程序 参数传递问题

    最近项目中使用需要上位机和下位机通过rs232通信,涉及到通讯加密问题, 硬件那边主要是pcb layout的,于是我就把加密的活拦了过来,锻炼锻炼 首先说明问题: 在c中,加密解密都测试通过,然后在 ...

  8. 深入浅出带你玩转sqlilabs(一)

    一.MySQL数据库结构分层 1.1库名,表名,列名,数据库用户等 Mysql数据库结构示例: 数据库A zblog = www.zblog.com 表名 列名(字段) 数据 数据库B dede = ...

  9. 【python】Leetcode每日一题-最大数

    [python]Leetcode每日一题-最大数 [题目描述] 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数. 注意:输出结果可能非常大,所以你需要返回一个 ...

  10. [CSP-J2019 江西] 道路拆除 题解

    发现大家都是将路径拆成三条链来做,这里提供一种暴力的乱搞方法. 思路 看到这一道题的第一想法就是跑最短路.可是仔细想想就发现,由于重合的路径只算一遍,所以导致两条最短路不一定是最优解. 接着,看到数据 ...