真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

go語言單測時間2022 go語言性能測試

Golang time.Time.Add()用法及代碼示例

在Go語言中,時間包提供了確定和查看時間的函數。 Go語言中的Time.Add()函數用于添加規(guī)定的時間和持續(xù)時間。此外,此函數在時間包下定義。在這里,您需要導入“time”包才能使用這些函數。

在成都網站設計、成都做網站中從網站色彩、結構布局、欄目設置、關鍵詞群組等細微處著手,突出企業(yè)的產品/服務/品牌,幫助企業(yè)鎖定精準用戶,提高在線咨詢和轉化,使成都網站營銷成為有效果、有回報的無錫營銷推廣。創(chuàng)新互聯公司專業(yè)成都網站建設十年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯客戶聯系。

用法:

在此,“t”是規(guī)定的時間,“d”是要添加到規(guī)定時間的持續(xù)時間。

返回值: 它返回將指定的t和d相加的結果。

例:

輸出:

此處,返回的輸出采用上述UTC格式。

GO語言(十六):模糊測試入門(上)

本教程介紹了 Go 中模糊測試的基礎知識。通過模糊測試,隨機數據會針對您的測試運行,以嘗試找出漏洞或導致崩潰的輸入。可以通過模糊測試發(fā)現的一些漏洞示例包括 SQL 注入、緩沖區(qū)溢出、拒絕服務和跨站點腳本攻擊。

在本教程中,您將為一個簡單的函數編寫一個模糊測試,運行 go 命令,并調試和修復代碼中的問題。

首先,為您要編寫的代碼創(chuàng)建一個文件夾。

1、打開命令提示符并切換到您的主目錄。

在 Linux 或 Mac 上:

在 Windows 上:

2、在命令提示符下,為您的代碼創(chuàng)建一個名為 fuzz 的目錄。

3、創(chuàng)建一個模塊來保存您的代碼。

運行go mod init命令,為其提供新代碼的模塊路徑。

接下來,您將添加一些簡單的代碼來反轉字符串,稍后我們將對其進行模糊測試。

在此步驟中,您將添加一個函數來反轉字符串。

a.使用您的文本編輯器,在 fuzz 目錄中創(chuàng)建一個名為 main.go 的文件。

獨立程序(與庫相反)始終位于 package 中main。

此函數將接受string,使用byte進行循環(huán) ,并在最后返回反轉的字符串。

此函數將運行一些Reverse操作,然后將輸出打印到命令行。這有助于查看運行中的代碼,并可能有助于調試。

e.該main函數使用 fmt 包,因此您需要導入它。

第一行代碼應如下所示:

從包含 main.go 的目錄中的命令行,運行代碼。

可以看到原來的字符串,反轉它的結果,然后再反轉它的結果,就相當于原來的了。

現在代碼正在運行,是時候測試它了。

在這一步中,您將為Reverse函數編寫一個基本的單元測試。

a.使用您的文本編輯器,在 fuzz 目錄中創(chuàng)建一個名為 reverse_test.go 的文件。

b.將以下代碼粘貼到 reverse_test.go 中。

這個簡單的測試將斷言列出的輸入字符串將被正確反轉。

使用運行單元測試go test

接下來,您將單元測試更改為模糊測試。

單元測試有局限性,即每個輸入都必須由開發(fā)人員添加到測試中。模糊測試的一個好處是它可以為您的代碼提供輸入,并且可以識別您提出的測試用例沒有達到的邊緣用例。

在本節(jié)中,您將單元測試轉換為模糊測試,這樣您就可以用更少的工作生成更多的輸入!

請注意,您可以將單元測試、基準測試和模糊測試保存在同一個 *_test.go 文件中,但對于本示例,您將單元測試轉換為模糊測試。

在您的文本編輯器中,將 reverse_test.go 中的單元測試替換為以下模糊測試。

Fuzzing 也有一些限制。在您的單元測試中,您可以預測Reverse函數的預期輸出,并驗證實際輸出是否滿足這些預期。

例如,在測試用例Reverse("Hello, world")中,單元測試將返回指定為"dlrow ,olleH".

模糊測試時,您無法預測預期輸出,因為您無法控制輸入。

但是,Reverse您可以在模糊測試中驗證函數的一些屬性。在這個模糊測試中檢查的兩個屬性是:

(1)將字符串反轉兩次保留原始值

(2)反轉的字符串將其狀態(tài)保留為有效的 UTF-8。

注意單元測試和模糊測試之間的語法差異:

(3)確保新包unicode/utf8已導入。

隨著單元測試轉換為模糊測試,是時候再次運行測試了。

a.在不進行模糊測試的情況下運行模糊測試,以確保種子輸入通過。

如果您在該文件中有其他測試,您也可以運行go test -run=FuzzReverse,并且您只想運行模糊測試。

b.運行FuzzReverse模糊測試,查看是否有任何隨機生成的字符串輸入會導致失敗。這是使用go test新標志-fuzz執(zhí)行的。

模糊測試時發(fā)生故障,導致問題的輸入被寫入將在下次運行的種子語料庫文件中go test,即使沒有-fuzz標志也是如此。要查看導致失敗的輸入,請在文本編輯器中打開寫入 testdata/fuzz/FuzzReverse 目錄的語料庫文件。您的種子語料庫文件可能包含不同的字符串,但格式相同。

語料庫文件的第一行表示編碼版本。以下每一行代表構成語料庫條目的每種類型的值。由于 fuzz target 只需要 1 個輸入,因此版本之后只有 1 個值。

c.運行沒有-fuzz標志的go test; 新的失敗種子語料庫條目將被使用:

由于我們的測試失敗,是時候調試了。

如何看待go語言泛型的最新設計?

Go 由于不支持泛型而臭名昭著,但最近,泛型已接近成為現實。Go 團隊實施了一個看起來比較穩(wěn)定的設計草案,并且正以源到源翻譯器原型的形式獲得關注。本文講述的是泛型的最新設計,以及如何自己嘗試泛型。

例子

FIFO Stack

假設你要創(chuàng)建一個先進先出堆棧。沒有泛型,你可能會這樣實現:

type?Stack?[]interface{}func?(s?Stack)?Peek()?interface{}?{

return?s[len(s)-1]

}

func?(s?*Stack)?Pop()?{

*s?=?(*s)[:

len(*s)-1]

}

func?(s?*Stack)?Push(value?interface{})?{

*s?=?

append(*s,?value)

}

但是,這里存在一個問題:每當你 Peek 項時,都必須使用類型斷言將其從 interface{} 轉換為你需要的類型。如果你的堆棧是 *MyObject 的堆棧,則意味著很多 s.Peek().(*MyObject)這樣的代碼。這不僅讓人眼花繚亂,而且還可能引發(fā)錯誤。比如忘記 * 怎么辦?或者如果您輸入錯誤的類型怎么辦?s.Push(MyObject{})` 可以順利編譯,而且你可能不會發(fā)現到自己的錯誤,直到它影響到你的整個服務為止。

通常,使用 interface{} 是相對危險的。使用更多受限制的類型總是更安全,因為可以在編譯時而不是運行時發(fā)現問題。

泛型通過允許類型具有類型參數來解決此問題:

type?Stack(type?T)?[]Tfunc?(s?Stack(T))?Peek()?T?{

return?s[len(s)-1]

}

func?(s?*Stack(T))?Pop()?{

*s?=?(*s)[:

len(*s)-1]

}

func?(s?*Stack(T))?Push(value?T)?{

*s?=?

append(*s,?value)

}

這會向 Stack 添加一個類型參數,從而完全不需要 interface{}?,F在,當你使用 Peek() 時,返回的值已經是原始類型,并且沒有機會返回錯誤的值類型。這種方式更安全,更容易使用。(譯注:就是看起來更丑陋,^-^)

此外,泛型代碼通常更易于編譯器優(yōu)化,從而獲得更好的性能(以二進制大小為代價)。如果我們對上面的非泛型代碼和泛型代碼進行基準測試,我們可以看到區(qū)別:

type?MyObject?struct?{

X?

int

}

var?sink?MyObjectfunc?BenchmarkGo1(b?*testing.B)?{

for?i?:=?0;?i??b.N;?i++?{

var?s?Stack

s.Push(MyObject{})

s.Push(MyObject{})

s.Pop()

sink?=?s.Peek().(MyObject)

}

}

func?BenchmarkGo2(b?*testing.B)?{

for?i?:=?0;?i??b.N;?i++?{

var?s?Stack(MyObject)

s.Push(MyObject{})

s.Push(MyObject{})

s.Pop()

sink?=?s.Peek()

}

}

結果:

BenchmarkGo1BenchmarkGo1-16?????12837528?????????87.0?ns/op???????48?B/op????????2?allocs/opBenchmarkGo2BenchmarkGo2-16?????28406479?????????41.9?ns/op???????24?B/op????????2?allocs/op

在這種情況下,我們分配更少的內存,同時泛型的速度是非泛型的兩倍。

合約(Contracts)

上面的堆棧示例適用于任何類型。但是,在許多情況下,你需要編寫僅適用于具有某些特征的類型的代碼。例如,你可能希望堆棧要求類型實現 String() 函數

【接口測試】Go語言進行簡單的接口測試

在正常的測試中,當我們需要進行接口測試時,通常使用接口調試工具,如postman進行接口測試

目前我在嘗試使用Go語言進行接口測試,使用的庫均為Go自帶的庫。

注:當前采用的接口為時事新聞接口,每天可以請求100次,需要的同學,可以自行使用。


網站標題:go語言單測時間2022 go語言性能測試
網址分享:http://weahome.cn/article/ddjjecg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部