Go 语言基础——错误处理

学习目标

掌握错误处理

掌握自定义错误处理

掌握defer关键字的使用

 

 

错误处理

GO没有异常处理机制

 

Go语言引入了一个关于错误处理的标准模式,即error接口,该接口的定义如下:type error interface {

​ Error() string

}

实例

可以通过errors.New快速创建错误实例

errors.New("错误信息")

 

语法格式:

import 	"errors"

//n表示函数正常执行后返回的结果,err代表出错后返回的错误信息
func Foo(param int)(n int, err error) {     
    // ...  
} 

//调用时的代码建议按如下方式处理错误情况: 
n, err := Foo(0)  
 
if err != nil {    
    // 错误处理 
} else {    
    // 使用返回值n  
} 

 

 

自定义error类型

 

 

defer关键字

  1. 类似于Java中的finally,在退出方法钱会执行defer修饰的语句
  2. 一个函数中可以存在多个defer语句
  3. defer语句的调用是遵照 先进后出的原则,即后一个defer语句将先被执行。
func CopyFile(dst, src string) (w int64, err error) {     
    srcFile, err := os.Open(src)     
    if err != nil {         
        return     
    } 
 
    defer srcFile.Close() 
 
    dstFile, err := os.Create(dstName)     
    if err != nil {         
        return     
    } 
 
    defer dstFile.Close() 
 
    return io.Copy(dstFile, srcFile)  
} 

 

 

painc与recover

 

panic用于不可以恢复的错误

panic退出前会执行defer指定的内容

 

错误恢复

func TestPanicVxExit(t *testing.T) {

	defer func() {
		if err := recover(); err != nil {
			fmt.Println("错误恢复 ", err)
		}
	}()
	fmt.Println("开始")
	panic(errors.New("出现错误!"))
	//os.Exit(-1)
	fmt.Println("结束")
}

 

os.Exit 退出

os.Exit直接终止程序不会调用defer指定的函数

os.Exit退出时不会输出当前用调用栈信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘彦青-Yannis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值