Go语言错误处理异常捕获+异常抛出

目录
  • 一、error变量可以做什么
    • 1.定义一个error变量
    • 2.错误的处理
    • 3.做函数返回值
    • 4.做函数参数
  • 二、模拟异常的捕获与抛出
    • 1.defer简介
    • 2.使用recover模拟异常的捕获
    • 3.使用panic主动抛出错误

前言:

Go 语言追求简洁优雅,所以,Go 语言不支持传统的 try…catch…finally 这种处理。
Go 中引入的错误处理方式为:defer, panic, recover,也仅仅是错处处理的模拟
Go语言的作者认为java等语言的错误处理底层实现较为复杂,就实现了函数可以返回错误类型以及
简单的异常捕获,虽然简单但是也非常精妙,大大的提高了运行效率。

一、error变量可以做什么

1.定义一个error变量

①直接new一个

err := errors.New("我是错误处理语句")

②实现Error接口

只要实现了Error接口就可以被error类型所接收,打印的时候会直接打印实现接口时,方法返回的字符串。

官方接口如下:

type error interface {
    Error() string
}

代码如下:

//定义一个结构体
type man struct {
    age int
}
//实现接口
func (a man) Error() string {
    str := "这是一个错误接口"
    return str
}
//创建函数返回错误类型
func judgeAge() (int, error) {
    var a man
    return 0, a
}
//主函数调用
func main() {
    _, e := judgeAge()
    if e!=nil{
        fmt.Println(e)
    }
}

2.错误的处理

将如果错误变量不为空,则将错误进行捕获打印,这里直接打印到了控制台,可以将错误打印到日志文件内,为以后系统的维护做保障。

代码如下:

package main

import (
    "errors"
    "fmt"
)

func main() {
    err := errors.New("我是错误处理语句")
    if err != nil {
        fmt.Println(err)
    }else {
        fmt.Println("没有错误")
    }
    fmt.Println(123)
}

3.做函数返回值

  • 如果函数返回的错误类型值不为空,则将其进行打印

代码如下:

package main

import (
    "errors"
    "fmt"
)

func test(num1,num2 int) error {
    if num2 == 0 {
        return errors.New("除数为零")
    }
    res := num1 / num2
    fmt.Println("计算结果为=", res)
    return nil

}
func main() {
    err := test(11,0)
    if err!=nil{
        fmt.Println(err)
    }
}

4.做函数参数

一般用作处理错误变量,在需要进行错误检验的时候调用函数,不用再进行判断了

代码如下:

func PrintError(err error){
    if err!=nil{
        fmt.Println(err)
    }
}

二、模拟异常的捕获与抛出

1.defer简介

defer后面定义的东西是在调用函数执行完的时候执行的代码,一般用于文件描述符、数据库对象的关闭(在之前讲管道的时候有介绍过)

 defer什么什么延时执行

代码如下:

func pDefer() {
    defer fmt.Println("hahaha")
    fmt.Println("hello")
}
func main() {
    pDefer()
}
/*
打印结果
    hello
    hahaha
*/

2.使用recover模拟异常的捕获

代码如下:

package main

import (
    "fmt"
)

func test() {
    //使用defer + recover 来捕获和处理异常(返回错误变量)
    //函数执行末尾执行这个匿名函数
     defer func() {
         err := recover() // recover()内置函数,可以捕获到异常
         if err != nil {  //说明捕获到错误
             fmt.Println(err)
         }
     }()
    num1 := 10
    num2 := 0
    res := num1 / num2
    fmt.Println("计算结果为=", res)

}
func main() {
    test()
}

3.使用panic主动抛出错误

异常的捕获,使程序还能够正常的运行,如果有致命错误就需要进行错误的抛出了,也就是宕机,不到迫不得已千万不要使用这个函数,有可能会造成大量数据的丢失

代码如下:

package main

import (
    "errors"
    "fmt"
)

func test() error {
    num1 := 10
    num2 := 0
    if num2 == 0 {
        return errors.New("除数为零")
    }
    res := num1 / num2
    fmt.Println("计算结果为=", res)
    return nil

}

func main() {
    //无论err是否为空,都进行程序的终止
     panic(test())//内置函数2,参数使一个interface接口
}

运行结果:

总结:

Go语言虽然没有一个较为成熟的异常捕获机制,但是其精简的错误处理仍旧能够满足其需求,减少错误的处理大大的加快了我们的开发效率,代码的运行效率。

到此这篇关于Go语言错误处理异常捕获+异常抛出的文章就介绍到这了,更多相关Go语言异常捕获和异常抛出内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android使用google breakpad捕获分析native cash

    Android 开发高手课 课后练习(1) 一.Chapter01 崩溃 https://time.geekbang.org/column/article/70602 https://github.com/AndroidAdvanceWithGeektime/Chapter01 1.遇到native cash时,生成.dmp文件 先检查sdk/ndk环境 在local.properties配置sdk/ndk 打包运行效果 点击CRASH按钮后生成的.dmp文件 2.利用breakpad的mini

  • django主动抛出403异常的方法详解

    前言 网上的做法基本都是下面的代码 return HttpResponseForbidden() 试了一下,效果一般,没有异常页面显示,最终显示的是浏览器的异常页面,如下图: 设置方法如下: 如果要想让服务器截获异常并且显示错误页可以用下面的方式: id = request.GET.get('id', '') timestamp = request.GET.get('timestamp', '') accesskey = request.GET.get('accesskey', '') if t

  • Golang捕获panic堆栈信息的讲解

    golang当中panic的时候如果启动的goroutine比较多,刷的信息满屏都是,在终端工具上因为刷的信息太多,找不到前边的信息,因此很有必要程序自己捕获panic,并且将错误信息输出到文件当中,以便定位排查问题. Golang捕获panic堆栈信息 func PanicTrace(kb int) []byte { s := []byte("/src/runtime/panic.go") e := []byte("\ngoroutine ") line := [

  • python中通过Django捕获所有异常的处理

    目录 概述 Django 统一异常处理 统一异常处理具体设计 自定义异常模块 自定义状态码枚举类 响应信息统一结果的封装 完善统一异常处理逻辑 应用场景 注册校验 源代码 尾语 概述 在项目中统一异常处理,可以防止代码中有未捕获的异常出现.本文介绍如何在 Django 项目中进行统一异常的处理,再结合状态码枚举类对项目异常信息进行日志记录. Django 统一异常处理 在 Django 项目中可以自定义 中间件类 继承 django.middleware.common 下的 Middleware

  • django 捕获异常和日志系统过程详解

    这一块的内容很少, 异常使用try except即可, 日志只需要几行配置. 使用装饰器捕获方法内的所有异常 我使用装饰器来整个包裹一个方法, 捕获方法中的所有异常信息.并将其转为json返回客户端. import functools def catch_exception(func, code=500, *args, **kwargs): ''' :param func: :return: ''' @functools.wraps(func, *args, **kwargs) def nefe

  • Django 解决开发自定义抛出异常的问题

    在开发过程中,针对用户输入的不合法信息,我们应该在后端进行数据验证,并抛出相关的异常传递到前端来提示用户. 可是如何进行自定义抛出异常信息呢?通常处理方法有三种,我将依次介绍这三种方法. 第一种方法: 这种方法最为简单,只需要创建一个字典对象,通过render传到前端即可. 字典对象如下: result = {'code':'', 'message':''} render(request, 'xxx.html', result:result) 第二种方法: 需要继承Exception类, 代码如

  • Go语言错误处理异常捕获+异常抛出

    目录 一.error变量可以做什么 1.定义一个error变量 2.错误的处理 3.做函数返回值 4.做函数参数 二.模拟异常的捕获与抛出 1.defer简介 2.使用recover模拟异常的捕获 3.使用panic主动抛出错误 前言: Go 语言追求简洁优雅,所以,Go 语言不支持传统的 try…catch…finally 这种处理.Go 中引入的错误处理方式为:defer, panic, recover,也仅仅是错处处理的模拟Go语言的作者认为java等语言的错误处理底层实现较为复杂,就实现

  • 解决python3捕获cx_oracle抛出的异常错误问题

    最近一直在用python写点监控oracle的程序,一直没有用到异常处理这一块,然后日常监控中一些错误笼统的抛出数据库连接异常,导致后续处理的时候无法及时定位问题. 于是早上抽点时间看了下python3关于cx_oracle的异常处理形式. 其实,我只是想在python抛出oracle错误的时候,捕获到具体ora-信息. 写法很简单,这里记录下,以备后用. try: oracle_check(dbname) except cx_Oracle.DatabaseError as msg: print

  • Java异常分类处理抛出捕获操作详解

    目录 什么是异常 1.算术异常 2.数组越界异常 3.空指针异常 异常的分类 异常的抛出(throw关键字) 异常的捕获 throws关键字 try catch关键字 finally关键字 总结 什么是异常 “程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.” 我们在平时写代码的过程中就可能会遇到异常,给大家给举一些容易遇到常见的异常例子: 1.算术异常 Exception in thread “main” java.lang.ArithmeticExcept

  • java 异常之手动抛出与自动抛出的实例讲解

    java异常处理机制的两类 1.抓:异常的处理,有两种方式 ① try-catch-finally ② throws 2.抛: ① 自动抛出 可以理解为所有没有使用throw关键字的异常处理都是自动抛出,由jvm进行判断和抛出. ②手动抛出 throw + 异常类的对象 >异常类可以是现成的,也可以是自己创建的异常类, 抛出异类的类型:若是RuntimException,可以不用显示处理. 若是一个Exception,必须要显示的处理. /* *1.手动抛出一个异常的例子 */ public c

  • 解决lambda表达式内出现异常无法throw抛出的问题

    目录 lambda表达式内出现异常无法throw抛出 问题描述 问题原因 解决方案 lambda表达式中无法抛出受检异常 lambda表达式内出现异常无法throw抛出 问题描述 今儿在使用lambda表达式时,lambda表达式内出现了异常,准备直接抛出,没想到却还是报错: 由于博主lambda表达式用的比较少,刚看到这问题时,可以说是一脸懵逼.毕竟两边的提示可以说是前后矛盾啊. 刷新几下编译器还是报错,就只能老老实实的找原因. 问题原因 所幸Java是一门比较成熟的语言,前辈们已经踩了足够的

  • JAVA异常处理捕获与抛出原理解析

    JAVA 异常 当代码运行出现错误导致程序终止运行或出现错误情况的状况,就是异常.异常不是指语法错误,即不属于编译错误,只有运行的程序才会有异常. 这个时候,JAVA 就提供了优秀的处理方法:异常处理 异常处理能让程序在异常发生时,按照异常处理设定的逻辑对异常进行处理,最大程度保证程序继续运行,并且显示并处理异常. JAVA 程序发生异常,就会用对应的异常类的对象来封装异常,JRE(Java Runtime Environment) 便会寻找对应的异常处理逻辑来处理该异常. 总的说来,异常处理机

  • 窥探Swift编程中的错误处理与异常抛出

    在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中是如何抛出异常的.在编译型语言中,错误一般分为编译错误和运行时错误.我们平时在代码中处理的错误为运行时错误,我们对异常进行处理的操作的目的是为了防止程序出现错误而导致其他的副作用,比如用户数据未保存等等. 在今天的文章中,先给出主动产生异常的几种情况,然后再给出如何处理被动异常. 一.主动退出程序的几种

  • C++抛出和接收异常的顺序

    异常(exception)是C++语言引入的错误处理机制.它 采用了统一的方式对程序的运行时错误进行处理,具有标准化.安全和高效的特点.C++为了实现异常处理,引入了三个关键字:try.throw.catch.异常由throw抛出,格式为throw[expression],由catch捕捉.Try语句块是可能抛出异常的语句块,它通常和一个或多个catch语句块连续出现. try语句块和catch语句块必须相互配合,以下三种情况都会导致编译错误: (1)只有try语句块而没有catch语句块,或者

  • java 异常捕获及处理案例详解

    目录 一.Java异常简介 二.Java异常的分类 三.异常的使用及执行流程 四.自定义异常 一.Java异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止.在Java中即,Java在编译或运行或者运行过程中出现的错误. Java提供了更加优秀的解决办法:异常处理机制. 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持

  • Node端异常捕获的实现方法

    目录 常见Node报错处理机制 try catch Node原生错误处理机制 Promise async/await + try catch unhandledRejection 特殊情况如何捕获异常 uncaughtException Express错误处理 常见Node报错处理机制 try catch try...catch是大家最常用的错误处理机制,Javascript语言内置的错误处理机制可以在检测到代码异常的时候直接进行捕获并处理. function test() { try { th

随机推荐