内容简介:类似于Java的catch代码块defer - panic - recover机制 + 闭包,可以提供一种更加优雅的方式处理错误(如:TestFmtInterface,TestPayEmployees等
- Go没有 Java 那样的try/catch机制,不能向上抛出异常,但是有自己的一套defer - panic - recover机制
- try/catch机制从底层往高层抛出异常耗费资源
- Go中处理错误是通过在函数和方法中返回错误对象作为它们唯一或者最后一个返回值,如果返回nil,表示没有错误
panic - recover来处理异常
- recover函数用于从panic或错误场景中恢复,可以让程序从panicking重新获取控制权,停止终止程序的过程,恢复程序正常执行
类似于Java的catch代码块
- recover只能在defer修饰的函数中使用 ,用于获取panic调用中传递的错误值(在别的地方调用,返回nil)
- panic会导致方法调用栈被展开,直到defer修饰的recover()被调用或者程序终止
自定义包中的异常处理
- 在包内部,总是应该从panic中recover,不允许显示地超出包范围的panic()
- 应该向包的调用者返回错误值,而不是panic
通过闭包处理错误
defer - panic - recover机制 + 闭包,可以提供一种更加优雅的方式处理错误( 仅适用于所有函数都是同一种签名 )
func errorHandler(fn fType1) fType1 { return func(a type1, b type2) { defer func() { if err, ok := recover().(error); ok { log.Printf("run time panic: %v", err) } }() fn(a, b) } } 复制代码
单元测试
- 测试程序必须属于被测试的包,并且文件名满足*_test.go
- 测试程序不会被普通的 Go 编译器编译,可以通过gotest编译普通程序和测试程序
- 测试程序必须导入“testing”包,测试程序内,函数名字为"TestZzz"形式
如:TestFmtInterface,TestPayEmployees等
- 测试函数的形式:func TestAbcde(t *testing.T)
T 是传给测试函数的结构类型,用来管理测试状态,支持格式化测试日志,如 t.Log,t.Error,t.ErrorF 等
-
测试失败可调用函数
- func (t *T) Fail() 标记测试函数为失败,然后执行余下测试
- func (t *T) FailNow() 标记测试函数为失败并且中止执行;文件内的其他测试函数也会被略过,继续执行下一个文件的测试函数
- func (t *T) Log(args ...interface{}) 打印错误日志
- func (t *T) Fatal(args ...interface{}) 相当于限制性Log(),然后执行FailNow()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。