错误处理与测试
通常(错误信息)都会有像 “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)
- testing 包中有一些类型和函数可以用来做简单的