the-way-to-go(六)

错误处理与测试

通常(错误信息)都会有像 “Error:” 这样的前缀,所以你的错误信息不要以大写字母开头

错误类型以 “Error” 结尾,错误变量以 “err” 或 “Err” 开头

不能随意地用 panic 中止程序,必须尽力补救错误让程序能继续执行

recover 只能在 defer 修饰的函数中使用:用于取得 panic 调用中传递过来的错误值,如果是正常执行,调用 recover 会返回 nil,且没有其它效果

panic 会导致栈被展开直到 defer 修饰的 recover () 被调用或者程序中止

这是所有自定义包实现者应该遵守的最佳实践:

1)在包内部,总是应该从 panic 中 recover:不允许显式的超出包范围的 panic ()

2)向包的调用者返回错误值(而不是 panic)。

单元测试:

// 常规测试
func TestMethodName(t *testing.T) {}

// 通知测试失败
func (t *T) Fail() //标记测试函数为失败,然后继续执行剩下的测试
func (t *T) FailNow() //标记测试函数为失败并中止执行(当前文件终止,下一个文件继续)
func (t *T) Log(args ...interface{}) //默认的格式格式化并打印到错误日志中
func (t *T) Fatal(args ...interface{}) //先打印(Log)再终止当前(FailNow)

// 简单的基准测试
func BenchmarkMethodName(t *testing.B) {}
  • 普通测试
    • 测试文件名必须满足 *_test.go
    • _test 程序不会被普通的 Go 编译器编译(只有 gotest 会编译所有的程序:普通程序和测试程序)
    • 测试文件中必须导入testing
    • 待测试方法名称必须满足TestXxx(全局;驼峰)
    • T 是传给测试函数的结构类型,用来管理测试状态,支持格式化测试日志( t.Log,t.Error,t.ErrorF 等)
    • 使用go test编译并执行测试代码
  • 基准测试
    • testing 包中有一些类型和函数可以用来做简单的基准测试;测试代码中必须包含以 BenchmarkZzz 打头的函数并接收一个 *testing.B 类型的参数
    • 命令go test –test.bench=.*会运行所有的基准测试函数;代码中的函数会被调用 N 次(N 是非常大的数,如 N = 1000000),并展示 N 的值和函数执行的平均时间,单位为 ns(纳秒,ns/op)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值