00:00
各位,我们接着来看一下错误处理里面的自定义错误。现在呢,我们来假设有这么一个情况,就是说如果我们发生一个错误过后,注意听在go程序里面我们发生一个错误,我希望呢,这个错误的信息由我自己来定义,这是第一点,第二点呢,我希望在发生错误过后,这个程序呢,也就放弃执行了。因为。因为有可能有有些错误,它是致命的,比如说读取一个配置文件。如果这个配置文件都没有读取到,那下面代码呢,执行也没有什么意义了,是不是,所以说在这个地方呢,我们可以通过自定义错误来完成这样的处理。那这时呢,我们会用到arrows包里面的一个六。六它可以,它可以创建一个error的一个错误类型,另外呢,有个panicle的内置函数,这个panic内置函数呢,可以直接抛出一个panic,并且退出程序,大家看我这写的,比如说errors,点六错误说明,把你的错误信息写进去。
01:08
它可它会得到啊,就整个这一段,它会返回一个error类型的值,表示一个错误,那同学们看一下我们的文档。大家看,找到我们的文档,叫error。大家看这里。A里面呢?是不是这个这个。点一下。哦,我这儿这个网有点小问题啊。网有点小问题。呃,网友点问题,那先暂时不去看它了,我因为其实也挺简单的,就说ERROR6呢,它会返回一个error类型,就这么一个东西,就这么东西表示一个错误,另外呢,Pan是一个内置函数,它可以接收一个空接口的类型,这个空接口大家还没学过。没有学过,因为接口我们还没讲,那么我就简单的给大家介绍一下,Panic呢,它可以接收一个呃,空接口类型,这个空接口类类型就是任何一个值都可以传过去。
02:09
OK,做一个参数,它甚它当然就可以接受error这种类型的变量,然后呢,我们可以把这个错误信息输出并退出程序,也就是说panic这个内置函数可以接受一个错误类型的变量,并且呢,打印出来,而且它会退出程序,就终止这个程序了。中就说相当于这个程序我就不玩了,那我给大家演示一下这个自定义错误的一个案例。好,我们来看看制定错误案例怎么写。好。我在这整理一下,呃,自定义错误,我们把它放在一个新的标题,比标题删吧,好吧,这是对它的一个介绍。自定义。自定义错误的介绍。
03:02
对吧,自定义错误的介绍给大家一个标题三。然后这做了一些介绍,其中有两点呢,是大家需要注意的。一点是这个arrows点六。它可以创建一个error类型的,看啊创建一个error类型的值表示一个错误,并且呢,Panicle这个类置函数可以接收这个错误,并且输出错误信息,而且输出完了过后呢,这个程序也就退出了。我给大家举个案例来案例说明一下。举例说明。案例说明一个。给他来个标题三,好吧,跟上老师思路。我们现在模拟一个错误,还就在这里面写吧,好不好,比如说我现在呢,有一个有一个函数。这个函数,这个函数去读取。读取。
04:00
一个配置文件的信息。哦,那么这个文件呢?这个文件的名字假设我们这样写的,叫init.config。如果这个文件名不不对呢?我们就抛出一个错误,注意听。如果文件名传入不正确。传入不正确。我们就抛出一个自定义的错误,我们就抛出或者是返回都可以返回一个自定义的错误,好,同学们看我怎么写。The funk。RA。Config完事,当然你给我传一个文件名进来。是准我也给你返,我给你返回一个什么呢?我给你返回一个error。E。OK,没没问题吧,这个。这个我们以前讲过,在返回列表里边是可以给一个变量名称的,对吧。
05:01
写到这里来。完了,那写完过后呢,我们就来判断,如果说这个name它等于什么呢?等于这个名字叫configgu.ina如果它等于这个名字,我们就认为它是正确的,就是读取。有读取。操作,那我也给他返回一个错误,叫meal,就是没有错误的意思,就near就是表示没有错误。那么,Else。哎,如果不是这样子怎么办呢?就说你的文件名传的不对怎么办呢?我我就返回一个,注意听返回一个自定义的错误,那怎么返回,就是刚才老师说的用arows这个包里边的有个new。给他来创,给他创建一个制定错误有什么呢?比如说叫做读取。文件名不对吧,或者叫读取文件错误。欧了。这个地方就就会返回一个。
06:00
Error这种类型的,呃,这这种数据。OK,那当然,既然我用到as这个包了,那我是不是应该引一个包进来?没问题吧,As包。好的,这个地方就是返回了一个自定义错误,那我怎么来测试呢?好,我再写一个函数fun,比如叫TEST02好不好?T02,我用它一下来,我这样子做啊,我这样做。我用一个error来接收,注意我接收一下。我怎么写呢?我在这里去调用read config。好的,如果我给他传的是正确的文件名。Config and it。好,我做一个判断。如果。A,注意听error。等于我这样写。它不等于零。他如果不等于逆我干什么呢?我就决定要抛出一个panic,并且终止程序。如果真的发生错误了,读取文件发生错误。
07:05
发生。发生错误就干什么呢?就输出这个错误并终止程序。终止。这个中。终止程序。那这个时候就用到我们刚才讲的一个内置函数叫panic。这是个内置函数,直接用就行了,那L打出来,注意这个函数的作用是第一个,它会把这个错误信息打出来并且终止,否则的话我该怎么玩怎么玩。好吧,否则我下面该怎么走就怎么走嘛,我该怎么怎么,诶完成我就写啊,就说这这叫TEST02后面的代码。注意听零二后边的代码。继续执行,继续执行。OK。那现在呢,我们来做一个测试,各位同学,因为这这个地方有一段测试代码,我先把它怎么样注销一下,注销过后呢,我来测试一下,测试自。
08:02
定义错误的使用。好,那我怎么测试的呢?我直接调用TEST02。我直接调用T02,好,下面呢,我也把这句话输出来。好吧,我们看看如果按照我们自定义错误的话,它会怎么做,我们先看一下此时此刻我在这调T02的时候,我传的这个文件名是不是正确的,是正确的话,它返回一个Li,返回一个Li的话,这边判断。不等于near就它它返回near嘛,它就不等于不等于near返回一个near,它就不等于它不等于它吧,诶我想想啊near哦,它就等于near,它等于near的话呢。它等于逆的话,那就不进去,不进去的话他就怎么样,他就继续执行,下面这句话也会继续执行,也就是说正常执行,因为我给的文件名怎么样是正确的。那么自定义呢,错误就不会抛出来,是这意思吧?来,我们走一个。
09:05
进入到我们,诶地方有问题有错误,我看是哪个地方错误。是不是因为这个地方没有用到time了呀?我把它注销下。来再跑一下CD到我们的这一个CHAPTER06对不对,然后CD到我们的A。然后再go run main。点勾跑起来,这个时候应该是正常执行。看它零二继续执行main,下面代码也是正常执行,那么如果说我在。TEST02里面给他传的文件名不对,那会怎么样呢?注意听,因为你传的是CON2这个文件名,传到这里面去了,那它不等于它,不等于它的话,它就会进入到这里面去,对不对?进到这里面去呢?它会把我这个自定义的错误给返回来。通过这个read config返回来,返回来过后我在这拿到了谁拿到记录,也就是说这样的一个逻辑。
10:08
我给他传了一个CONFLICT2。它显然这地方是不等的,不等就会进入到这句话,进入到这句话呢,它会返回一个error错误,这个error错误返回到哪里了呢?返回到这了。那这个时候这个error肯定是。怎么样,不等于逆了,因为的的确确错了嘛,那么这个时候就会panic panic克会做什么事情呢?他会把这个错误。它会读取文件发送的错误,而且它会输出来这个错误,其实就会输出这句话,然后程序终止了,那我问大家程序终止的话,这句话还会输出吗?肯定不会了,因为他已经终止程序了,同样的道理,是不是这句话?也会。不知谁因为也会退出,是不是他也会也会退出,也不执行,因为他直接就退出程序了。
11:00
好,我们来看看是不是这样子的呢,跟我们分析是不是一样的,走一个我看代码。我们可以看到他直接在这发出一个panicle读取文件,错误后面代码全部都是都不执行了,错误是在哪里发生的?41行。41行,我们看41行是哪一行?是不是就这样?是吧,好,同学们,这个就是我们自定义错误的一个用法。就是它可以干什么呢?把我们自定义错误信息输出,并且呢,我们还可以终止这个程序啊,我们还可以终止程序,好,我把这块的用法呢,给同学们整理到我们的笔记里边去。来看一下。这里。是我们的一段核心代码。是吧,哪里是我们自定义老师写的很清楚,就这句话很关键。它返回的类型,注意听返回的数据类型是一个error类型的。我把它给大家整理好。
12:01
是吧,然后呢,我们还有一个同学们,还有就是另外一段代码,就是怎么调用的,在这写一下。我们在main函数里边,我们调用了TEST02。我们调用了TEST002在这调用的。是不是就是调用的呀。是这儿,他是零儿。把它放起来。好的,把这一下。好,同学们,这个呢,就是我们。这个就是我们自定义。叫做自定义错误的一个案例,大家看一下能不能理解。OK啊,还是比较简单对吧,还是比较简单,同学们,那关于我们这一章的就是第六章的内容,我们就全部给大家讲完了,我们这一章主要讲了函数包和错误处理。那么这个呢,讲完过后,我们下一次就开始新的一个章节的讲解,在讲新的章节的时候呢,我可能会给大家布置一些作业,这个作业呢,我希望同学们把它给认真的完成了,好的,那关于零六这个章节的内容,我们就全部给大家介绍完了,下面呢就准备讲第七章的内容。
我来说两句