- 第6章 包和代码测试
- 6.1 包及Go工具
- 6.1.1 包导入
- 6.1.2 Go工具
-
- 6.2 代码优化
- 6.2.1 Go代码的优化
- 代码的优化要基于Go语言的语法和编译器原理进行。代码的优化关键是性能分析。
-
- Go语言提供了 runtime/pprof 标准库。 go tool pprof --help
-
- 6.2.2 性能分析
- 常见原因:
- 1.cpu占有率高,高负荷运转,要找到是执行哪个函数时出现这种情况的;
- 2.goroutime在死锁状态,没有运行,但是占用了资源;
- 3.垃圾回收占用时间
-
- 针对这些情况,可以收集cpu的执行数据,pprof会不停采样,然后找出高度占用cpu的函数,在生成.prof文件后,可以通过
- go tool pprof 文件进行分析。
-
- 在 runtime/pprof 包内提供了如下主要的接口:
- //堆栈分析,可以分析内存的使用情况
- func WriteHeapProfile(w io.Writer) error
-
- //CPU分析
- func StartCPUProfile(w io.Writer) error
- func StopCPUProfile()
-
- go tool pprof -svg 图片
-
- 6.3 测试
- Go语言提供了三种测试函数:功能测试函数、基准测试函数、示例测试。
-
- 6.3.1 功能测试函数
- 功能测试函数是以 Test 为前缀命名的函数,其主要作用是检测函数程序逻辑正确性,运行go test后,结果会以 PASS(通过),
- 或者FAIL(不通过)进行报告。
-
- func TestXxx(t *testing.T) {
- ...
- }
-
- 6.3.2 基准测试函数
- go test -bench=.
-
- func BenchmarkXxx(b *testing.B) {
- ...
- }
-
- 6.3.3 示例函数
- func ExampleXxx() {
- ...
- }