funcTestTriangle(t *testing.T){
tests :=[]struct{ a, b, c int}{{3,4,5},{5,12,13},{8,15,17},{12,35,37},{30000,40000,50000},}for_, tt :=range tests {if actual :=calcTriangle(tt.a, tt.b); actual != tt.c {
t.Errorf("calcTriangle(%d, %d); "+"got %d; expected %d",
tt.a, tt.b, actual, tt.c)}}}
命令行
go test ./
運行結果 :
ok imooc.com/ccmouse/learngo/basic/basic 0.817s
代碼覆蓋率
goland裏 Run xxx With Coverage
命令行
go test -coverprofile = c.out
// 輸出
PASS
coverage:52.6% of statements
ok imooc.com/ccmouse/learngo/container/nonrepeatingsubstr 0.953s
// 結果如下圖go tool cover -html c.out
性能測試
funcBenchmarkSubstr(b *testing.B){
s :="黑化肥揮發發灰會花飛灰化肥揮發發黑會飛花"
ans :=8for i :=0; i < b.N; i++{
actual :=lengthOfNonRepeatingSubStr(s)if actual != ans {
b.Errorf("got %d for input %s; "+"expected %d",
actual, s, ans)}}}// 輸出2000000933 ns/op // 200W次 每次執行耗時933納秒
PASS
命令行
go test -bench ./
查看性能消耗
// 1.go test -bench ./-cpuprefile cpu.out
// 2.go tool pprof cpu.out
// 3.進入pprof操作界面
Type: cpu
Time: Jun 5,2019 at 10:25pm (CST)
Duration:2.10s, Total samples =2.13s (101.43%)
Entering interactive mode (type"help"for commands,"o"for options)(pprof)// 4.web(需要安裝Graphviz)// or text/top 輸出如下
Showing nodes accounting for2.04s,95.77% of 2.13s total
Dropped 19 nodes (cum <=0.01s)
Showing top 10 nodes out of 30
flat flat% sum% cum cum%0.53s 24.88%24.88%0.64s 30.05% runtime.mapaccess2_fast32
0.48s 22.54%47.42%0.61s 28.64% runtime.mapassign_fast32
0.41s 19.25%66.67%0.41s 19.25% runtime.decoderune
0.17s 7.98%74.65%0.58s 27.23% runtime.stringtoslicerune
0.12s 5.63%80.28%1.95s 91.55% imooc.com/ccmouse/learngo/container/nonrepeatingsubstr.lengthOfNonRepeatingSubStr
0.11s 5.16%85.45%0.11s 5.16% runtime.add (inline)0.10s 4.69%90.14%0.10s 4.69% runtime.aeshash32
0.07s 3.29%93.43%0.07s 3.29% runtime.procyield
0.03s 1.41%94.84%0.03s 1.41% runtime.bucketShift (inline)0.02s 0.94%95.77%0.02s 0.94% runtime.stdcall1
文檔
用註釋寫文檔
在測試種加入Example
使用go doc / godoc 來 查看/生成 文檔
命令行
$ go doc Queue
Output:
type Queue []int
A FIFO queue.func(q *Queue)IsEmpty()boolfunc(q *Queue)Pop()intfunc(q *Queue)Push(v int)
$ go doc IsEmpty
func(q *Queue)IsEmpty()bool
Returns if the queue is empty or not.