程式應該多做測試,少做除錯
傳統測試 vs **驅動測試(go語言使用)
//傳統測試
@test public void testadd()
測試資料和測試邏輯混合在一起
出錯資訊不明確
一旦乙個資料出錯測試全部結束
//**驅動測試
test :=
struct,,
,//整數溢位 最大的整數+1成為最小整數
}for
_,test :=
range tests
}
testing.t的使用
執行測試
func
calc********
(a,b int
)int
func
trangle()
-------------------new test go file--------------------------
package main
import
"testing"
func
test********
(t *testing.t),,
,}for_
,tt :=
range tests
}}
用命令列執行
進入專案目錄,go test .
//最長不重複子串測試
func
testsubstr
(t *testing.t),,
//edge case,,
,//chinese support,}
for_
,tt :=
range tests
}}
命令列執行
go test -coverprofile=c.out
或者go tool cover -html=c.out
//效能測試
func
benchmarksubstr
(b *testing.b)
}}
如果用命令列:go test -bench .
//效能測試
func
benchmarksubstr
(b *testing.b)
b.logf
("len(s) = %d"
,len
(s))
//記log
//迴圈多少遍不用關心,用b.n就行
for i :
0;i}}
尋找最長不重複字串國際版:
func
lengthofnonrepatingsubstr
(s string
)int
if i - start +
1> maxlength
lastoccurred[ch]
=i }
return maxlength
}
先進行測試:
go test -bench . -cpuprofile cpu.out
go tool pprof cpu.out
互動式命令列:web,為了進行圖形化顯示,還需要安裝graphviz
效能主要在rune(s)和map上,rune(s)是必須要的,只能優化map,用其他資料結構
func
lengthofnonrepatingsubstr
(s string
)int
//lastoccurred[0x65] = 1 //e
//lastoccurred[0x8bfe] = 6 //課
start :=
0 maxlength :=
0for i,ch :=
range
rune
(s)if i - start +
1> maxlength
lastoccurred[ch]
=i }
return maxlength
}
-cpuprofile獲取效能資料
go tool pprof檢視效能資料
分析慢在**
優化**
func
(t *testing.t),}
for_
,tt :=
range tests
}}
//提出公用
var tests :=
struct,}
//提取方法
}
通過使用假的request/response (類似於單元測試)
通過起伺服器(缺點是慢)
go doc
go doc queue
go help doc
godoc -http :6060 //特別有用,直接在本地檢視函式文件
-----------以queue示例------------------------------------
package queue
//an fifo queue
type queue [
]int
//pushes the element into the queue
// e.g q.push(123) 換行畫了個框
func
(q *queue)
push
(v int
)//pops element from head
func
(q *queue)
pop(
)int
//returns if the queue is empty or not
func
(q *queue)
isempty()
bool
func
examplequeue_pop()
q.push(2
) q.
push(3
) fmt.
println
(q.isempty()
)//false
//寫示例**
//output:
//false
}
//自動生成code和output
用注釋寫文件
在測試中加入example
使用go doc/godoc 來檢視/生成文件
**驅動測試
**覆蓋
效能優化工具
http測試
文件以及示例**
8 Go語言 指標型別
1.實際用法package main import fmt func main 執行結果 0xc042052088 0xc0420461b02.從指標獲取指標指向的值 在對普通變數使用 操作符取位址獲得這個變數的指標後,可以對指標使用 操作,也就是指標取值 package main import f...
效能測試調優
效能測試的目的就評估當前系統效能的指標,分析定位解決效能瓶頸,預防規避效能風險。效能分析是為了確定導致效能瓶頸的原因,而調優就是用來解決效能瓶頸。通過某些手段讓系統效能得到提高,是效能調優的主要目的。效能分析主要有兩種方法 1.將測試結果與使用者需求做比較,如果達到使用者需求,則測試通過。系統滿足1...
GO學習 8 Go語言基礎之陣列
陣列是同一種資料型別元素的集合。在go語言中,陣列從宣告時就確定,使用時可以修改陣列成員,但是陣列大小不可變化。基本語法 定義乙個長度為3元素型別為int的陣列a var a 3 intvar 陣列變數名 元素數量 t比如 var a 5 int,陣列的長度必須是常量,並且長度是陣列型別的一部分。一...