Go 语言中的错误处理机制

十安辰 · · 2362 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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)
	}

}
复制代码

有疑问加站长微信联系(非本文作者)

本文来自:掘金

感谢作者:十安辰

查看原文:Go 语言中的错误处理机制

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2362 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传