Erlo

Go 语言中的错误处理机制

时间:2021-05-04   阅读:12次   来源:jQuery中文网
页面报错
点赞

Go 语言中的错误处理机制

一、错误处理机制引出

  1. 在默认情况下,当发生错误后(panic) ,程序就会退出(崩溃.)
  2. 如果我们希望:当发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行。还可以在捕获到错误后,给管理员一个提示(邮件,短信。。。)
  3. 这里引出我们要将的错误处理机制

二、说明

  1. Go 语言追求简洁优雅,所以,Go 语言不支持传统的 try…catch…finally  这种处理。
  2. Go 中引入的处理方式为:defer, panic, recover
  3. 这几个异常的使用场景可以这么简单描述:Go 中可以抛出一个 panic 的异常,然后在 defer 中通过 recover 捕获这个异常,然后正常处理

三、使用defer recover 来处理错误

package main

import (
	"fmt"
	"time"
)

func test(){
	//使用defer   recover来捕获和处理异常
	defer func(){
		err := recover() // recover()是go内置函数,可以捕获到异常
		if err != nil { //err 不为空
			fmt.Println("err=", err)
		}
	}()//匿名函数
	num1 := 10
	num2 := 0
	res := num1/num2 //这句会报错,
	fmt.Println("res=", res)
}

func main(){
	test()
	for i:=0;i<3;i  {
		fmt.Println("main()下面的代码...")
		time.Sleep(time.Second)
	}
}
复制代码

四、自定义错误

Go 程序中,也支持自定义错误, 使用 errors.New 和 panic 内置函数。

  1. errors.New("错误说明") ,  会返回一个 error 类型的值,表示一个错误
  2. panic 内置函数 ,接收一个 interface{}类型的值(也就是任何值了)作为参数。可以接收 error 类型的变量,输出错误信息并退出程序.
package main

import (
	"errors"
	"fmt"
	"time"
)

//函数去读取以配置文件init.conf的信息
//如果文件名传入不正确, 我们就返回一个自定义的错误
func readConf(name string) (err error) {
	if name == "config.ini" {
		//读取...
		return nil
	} else {
		return errors.New("读取文件错误")
	}
}

func test() {
	err := readConf("config2.ini")
	if err != nil {
		//如果读取文件发生错误,则err不为空(nil),并终止程序
		panic(err)
	}
	fmt.Println("test()继续执行...")
}

func main() {
	test()
	for i := 0; i < 3; i   {
		fmt.Println("main()下面的代码...")
		time.Sleep(time.Second)
	}

}
复制代码

评论留言

还没有评论留言,赶紧来抢楼吧~~

吐槽小黑屋()

* 这里是“吐槽小黑屋”,所有人可看,只保留当天信息。

  • Erlo吐槽

    Erlo.vip2021-05-09 01:15:12Hello、欢迎使用吐槽小黑屋,这就是个吐槽的地方。
  • 返回顶部

    给这篇文章打个标签吧~

    棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认