Go语言学习笔记 - PART12 - 异常处理机制与单元测试

栏目: Go · 发布时间: 5年前

内容简介:类似于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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

浅薄

浅薄

[美]尼古拉斯·卡尔 / 刘纯毅 / 中信出版社 / 2015-11 / 49.00 元

互联网时代的飞速发展带来了各行各业效率的提升和生活的便利,但卡尔指出,当我们每天在翻看手机上的社交平台,阅读那些看似有趣和有深度的文章时,在我们尽情享受互联网慷慨施舍的过程中,我们正在渐渐丧失深度阅读和深度思考的能力。 互联网鼓励我们蜻蜓点水般地从多种信息来源中广泛采集碎片化的信息,其伦理规范就是工业主义,这是一套速度至上、效率至上的伦理,也是一套产量最优化、消费最优化的伦理——如此说来,互......一起来看看 《浅薄》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具