Go-24-异常处理机制
error 接口
type error interface(){
Error() string
}
在Go语言中处理错误的方式通常是将返回的错误与nil进行比较。nil值表示没有发生错误,而非nil值表示出现错误。如果不是nil,需打印输出错误。
package main import (
"errors"
"fmt"
"math"
) // 异常处理机制 error 接口
func main() {
num,err:=Sqrt(-100)
if err!=nil{
fmt.Println(err)
}else{
fmt.Println(num)
}
}
// 定义平法根,算术运算
func Sqrt(num float64)(float64,error){
if num>0 {
return math.Sqrt(num),nil
}else {
return 0,errors.New("负数不可以求算术平方根")
}
}
自定义接口类型:
step1: 定义一个结构体,表示自定义错误的类型。
step2:让自定义错误类型实现error接口:Error() string。
step3:定义一个返回error的函数。根据程序实际功能而定。
package main import (
"fmt"
"strings"
) //step 1:自定义错误结构体
type MyError struct {
err string
}
// step2:让自定义错误类型实现error接口:Error() string
func (e MyError) Error() string{
return e.err
}
// step3: 定义一个返回error的方法
func test(str string) (string,error){
if strings.EqualFold(str,"err"){
return "",MyError{"传入的字符串不可以是err"}
}
return str,nil
}
func main() {
str,err:=test("err")
if err!=nil {
fmt.Println(err)
}else {
fmt.Println(str)
}
}
defer函数
关键字defer用于延迟一个函数或者方法的执行。defer语句只能出现在函数或方法的内部。
在函数中可以添加多个defer语句。如果有很多调用defer,当函数执行到最后时,这些defer语句会按照逆序执行(报错的时候也会执行),最后该函数返回。
package main import "fmt" //defer 推迟方法的执行
func main() {
defer A()
B()
defer C()
fmt.Println("end----------")
}
func A() {
fmt.Println("A-----------")
}
func B() {
fmt.Println("B-----------")
}
func C(){
fmt.Println("C-----------")
}
延迟函数的参数在执行延迟语句时被执行,而不是在执行实际的函数调用时执行。
当一个函数有多个延迟调用时,它们被添加到一个堆栈中,并按后进先出(Last In First Out,LIFO)的顺序执行.
panic和recover机制
不应通过调用panic()函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。当某些不应该发生的场景发生时调用panic()
Go语言为开发者提供了专用于“拦截”运行时panic的内建函数recover()。recover()可以让进入恐慌流程的Goroutine恢复过来并重新获得流程控制权。
recover() 只在推迟函数种有效。
Go-24-异常处理机制的更多相关文章
- Java基础(四)-异常处理机制及其设计
本篇主要是记录自己所理解的Java异常处理机制(基于jdk1.7)以及怎么去处理和设计异常.还记得当初学习Java异常这块的时候都没怎么注意它的用途,以为就是简单的处理下异常,我避免程序出现这样错误就 ...
- Java 的异常处理机制
异常是日常开发中大家都「敬而远之」的一个东西,但实际上几乎每种高级程序设计语言都有自己的异常处理机制,因为无论你是多么厉害的程序员,都不可避免的出错,换句话说:你再牛逼,你也有写出 Bug 的时候. ...
- C++ 异常处理机制的实现
http://blog.jobbole.com/103925/ 本文深入讨论了VC++编译器异常处理的实现机制.附件源代码包含了一个VC++的异常处理库. 下载源代码 – 19 Kb 介绍 相对于传统 ...
- WCF服务全局异常处理机制
服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. ...
- Objective-C try/catch异常处理机制原理。
try-catch-finaly finally在任何情况下都会执行(不管有没有异常),属于整个体系的附属. 基本思想是跳到捕获锚点,重新执行. http://www.cnblogs.com/mark ...
- SpringBoot exception异常处理机制源码解析
一.Spring Boot默认的异常处理机制 1:浏览器默认返回效果 2:原理解析 为了便于源码跟踪解析,在·Controller中手动设置异常. @RequestMapping(value=&quo ...
- Java中的异常处理机制《》
异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性. Java异常机制主要依赖于try.catch.finall ...
- Java异常处理机制 try-catch-finally 剖析
Java拥有着强大的异常处理机制,最近初步学习了下,感觉内容还是挺多的,特此来将自己的理解写出来与大家分享. 一. 在Java代码code中,由于使用Myeclipse IDE,可以自动提醒用户哪里有 ...
- JAVA 异常处理机制
主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...
- 深入理解java异常处理机制
异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的 ...
随机推荐
- 最实用JS 留着学习
1.A标签删除 function input(){ var b = window.confirm("确认要删除本条信息!"); if(b==true){ ret ...
- 【原创】Linux虚拟化KVM-Qemu分析(十)之virtio驱动
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...
- 2021-2-25:对于 Java MMAP,如何查看文件映射脏页,如何统计MMAP的内存大小?
我们写一个测试程序: public static void main(String[] args) throws Exception { RandomAccessFile randomAccessFi ...
- 【函数分享】每日PHP函数分享(2021-3-1)
array_filter - 使用回调函数过滤数组的元素 说明 array_filter ( array $array , callable|null $callback = null , int $ ...
- python:虚拟环境与pip
原生pip镜像下载速度较慢,配置使用国内镜像.这里选择清华镜像,文档地址:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ pip 镜像配置 临时使用: ...
- 使用 SVG transform rotate 解决画框中的数字跟随旋转的问题
问题描述 在图片上画框标注数字,旋转画布后,数字随之旋转,可读性不强,要求修改成无论画布怎么旋转,数字都是正向显示~ 原交互图示: 解决方案 先看下 dom 的结构 然后看下下面简单的代码 // 获取 ...
- ubantu16与windows下——redis的安装与使用
(1) 打开ubantu16,使用如下命令下载安装包 wget http://download.redis.io/releases/redis-2.8.3.tar.gz (2)解压缩命令: tar ...
- python工业互联网应用实战8—django-simpleui
笔者也使用过一段时间adminx组件,后来由于adminx停更,又遇到更简单的django-simpleui后,现在基本上只使用simpleui了,使用simpleui的几个好处,笔者认为排在第一位的 ...
- 安装JDK9,jemter无法正常启动,怎么退回到JDK8
安装JDK8,配置环境变量 java -version显示的是8.1 然后安装JDK9之后,java -version显示的是9+8.1 这个时候,无法正常启动jemter 在环境变量中把path的C ...
- Flutter,Weex,React Native比较