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

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

查看所有标签

猜你喜欢:

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

Web标准和SEO应用实践

Web标准和SEO应用实践

Aarron Walter / 李清 / 机械工业出版社 / 2008 / 36.00元

本书是关于搜索引擎优化和易发现性的技术指南。. 本书介绍Web标准、可访问性以及Ajax、API、Flash和微格式等内容,包括标记策略、服务器端策略、内容策略、建构易发现的博客、在网站内添加搜索、防止易发现性障碍、用邮件列表挽回流量、将易发现性付诸实践。 本书适合网站开发者与SEO技术业余爱好者等参考。 这不是为营销专家写的一本SEO的书。 针对那些想要找到网站的目标用户......一起来看看 《Web标准和SEO应用实践》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具