8 go語言 測試與效能調優

2021-09-27 10:24:33 字數 3580 閱讀 1994

程式應該多做測試,少做除錯

傳統測試 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,陣列的長度必須是常量,並且長度是陣列型別的一部分。一...