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編碼的時候處理字符串轉義會致使性能降低,若是字符串很長,可能會成爲瓶頸。