Test
go test -v -run=[pattern]
Benchmark
go test -v -run=bench -bench=[pattern] -cpu=[n] -benchtime=[t]
Analysis
race:
go test -v -run=[pattern] -race
cpu:
go test -v -run=bench -bench=[pattern] -cpu=[n] -benchtime=[t] -cpuprofile=[output]
mem:
go test -v -run=bench -bench=[pattern] -cpu=[n] -benchtime=[t] -memprofile=[output]
block:
go test -v -run=bench -bench=[pattern] -cpu=[n] -benchtime=[t] -blockprofile=[output]
go tool pprof [program].test [output]
GODEBUG
runtime提供了环境变量来控制程序。GODEBUG是其中一,它能够设置不少值,格式`name=value,name=val`,如开启gctrace:`$ GODEBUG='gctrace=1' your_program`,会在标准错误输出gc信息。
JSON
ffjson:https://github.com/pquerna/ffjson
用它替换标准库后,编解码效率提升2倍。
对于一些须要编码的大对象,能够采用sync.Pool缓存必定大小的bytes.Buffer,而后直接写buffer来完成json编码,性能有必定提升,
在我笔记本上测10*1024的字符串数组,大概比标准json快20%,结果受到分配buffer大小的影响。
在对json对象编码的时候,若是有字符串字段,而且字符串可能出现json格式用到的字符,最好预先对字符串编码,不然json编码的时候处理字符串转义会致使性能降低,若是字符串很长,可能会成为瓶颈。