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

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

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

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

查看所有标签

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

深入分析Java Web技术内幕(修订版)

深入分析Java Web技术内幕(修订版)

许令波 / 电子工业出版社 / 2014-8-1 / CNY 79.00

《深入分析Java Web技术内幕(修订版)》新增了淘宝在无线端的应用实践,包括:CDN 动态加速、多终端化改造、 多终端Session 统一 ,以及在大流量的情况下,如何跨越性能、网络和一个地区的电力瓶颈等内容,并提供了比较完整的解决方案。 《深入分析Java Web技术内幕(修订版)》主要围绕Java Web 相关技术从三方面全面、深入地进行了阐述。首先介绍前端知识,即在JavaWeb ......一起来看看 《深入分析Java Web技术内幕(修订版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具