Go语言课程笔记之性能优化|青训营笔记

91 阅读3分钟

这是我参与「第五届青训营」笔记创作活动的第7天,今天我将总结一下Go语言中性能优化的相关内容与概念,主要从单元测试、基准测试等几方面来进行总结。

单元测试


单元测试,是指对软件中的最小可测试单元进行检查和验证,是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。


在Go语言中,单元测试文件有以下特点:

  1. 单元测试文件:所有文件以_test.go结尾
  2. 单元测试函数:一般写为func TestXxx(testing.T)形式
  3. TestMain:初始化逻辑放在TestMain中

执行语句

单元测试可以通过以下语句进行: go test x_test.go x.go

单元测试的覆盖率

意义

单元测试的覆盖率代表测试代码覆盖(执行)了原始代码的百分比。

单元测试的覆盖率可以通过如下语句进行计算:

go test x_test.go x.go --cover  //直接运行测试并进行覆盖率计算

在开发中一般单元测试覆盖率需要达到:50%~60%,要求较高,覆盖率可以达到80%+

单元测试相关软件包

可以使用monkey包:github.com/bouk/monkey

作用:使测试再不依赖本地文件

基准测试


基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。


与单元测试类似,基准测试函数一般写为func BenchmarkXxx(testing.T)形式,相关语句:

执行基准测试命令:go test -bench=. -benchmem

性能分析工具pprof

使用方式:

import ("net/http" 
_ "net/http/pprof"
)  
func main(){
    go func() {  //添加在main函数中
    if err := http.ListenAndServe(":6060", nil); err != nil {
    log.Fatal(err)
    }
    os.Exit(0)
    }()
}

CPU相关命令

  • 采样

    go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
    
  • 查看资源占用

    top
    
  • 排查问题查找

    list [正则表达式]  //根据指定的正则表达式查找命令行
    
  • 可视化网页

    使用可视化网页进行观察

    web
    

其他性能分析相关命令

//堆内存
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"
//协程
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"
//锁
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"
//阻塞
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"

参考网页

  1. 单元测试-百度百科
  2. 基准测试

当然在现在纸上谈兵还是没有什么实际作用,后续进行测试的时候会再进行进一步的学习,其实现在包括基准测试的一些命令与用法现在也不是特别清楚,后续会继续推进,其实项目推进学习是一个很好的方法,也希望这次的大项目做完以后能收获一个好的成绩。