Reverse為了解決這個(gè)問題,如果輸入不是有效的 UTF-8 ,讓我們返回一個(gè)錯(cuò)誤。
成都創(chuàng)新互聯(lián)公司專注于宜秀網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供宜秀營銷型網(wǎng)站建設(shè),宜秀網(wǎng)站制作、宜秀網(wǎng)頁設(shè)計(jì)、宜秀網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造宜秀網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供宜秀網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
a.在您的文本編輯器中,將現(xiàn)有Reverse函數(shù)替換為以下內(nèi)容。
如果輸入字符串包含無效的 UTF-8 字符,此更改將返回錯(cuò)誤。
b.由于 Reverse 函數(shù)現(xiàn)在返回錯(cuò)誤,因此修改main函數(shù)以丟棄額外的錯(cuò)誤值。將現(xiàn)有main功能替換為以下內(nèi)容。
這些調(diào)用Reverse應(yīng)該返回一個(gè) nil 錯(cuò)誤,因?yàn)檩斎胱址怯行У?UTF-8。
c.您將需要導(dǎo)入錯(cuò)誤和 unicode/utf8 包。main.go 中的 import 語句應(yīng)如下所示。
d.修改reverse_test.go文件檢查是否有錯(cuò)誤,如果返回產(chǎn)生錯(cuò)誤則跳過測(cè)試。
除了返回之外,您還可以調(diào)用t.Skip()以停止執(zhí)行該模糊輸入。
a.使用 go test 運(yùn)行測(cè)試
b.使用go test -fuzz=Fuzz進(jìn)行模糊測(cè)試,幾秒鐘后,停止用ctrl-C模糊測(cè)試。
除非您通過-fuzztime標(biāo)志進(jìn)行限制,否則模糊測(cè)試將一直運(yùn)行,直到遇到失敗的輸入。如果沒有發(fā)生故障,默認(rèn)是永遠(yuǎn)運(yùn)行,并且可以使用 中斷該過程ctrl-C。
c. 使用go test -fuzz=Fuzz -fuzztime 30s。如果沒有30 秒發(fā)現(xiàn)失敗,它會(huì)在退出模糊測(cè)試。
模糊測(cè)試通過了!
做得很好!您剛剛學(xué)習(xí)了在 Go 中進(jìn)行模糊測(cè)試。
— main.go —
— reverse_test.go —
之前寫過了Go語言gorm框架MySQL實(shí)踐,其中對(duì)gorm框架在操作MySQL的各種基礎(chǔ)實(shí)踐,下面分享一下如何使用gorm框架對(duì)MySQL直接進(jìn)行性能測(cè)試的簡(jiǎn)單實(shí)踐。
這里我使用了一個(gè)原始的Go語言版本的 FunTester 測(cè)試框架,現(xiàn)在只有一個(gè)基本的方法,實(shí)在是因?yàn)镚o語言特性太強(qiáng)了。框架設(shè)計(jì)的主要思路之一就是利用Go語言的閉包和方法參數(shù)特性,將一個(gè) func() 當(dāng)做性能測(cè)試的主題,通過不斷運(yùn)行這個(gè) func() 來實(shí)現(xiàn)性能測(cè)試。當(dāng)然還有另外一個(gè)思路就是運(yùn)行一個(gè)多線程任務(wù)類,類似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象類,這樣可以設(shè)置一些類的屬性,綁定一些測(cè)試資源,適配更多的測(cè)試場(chǎng)景。
下面演示select的性能測(cè)試,這里我用了隨機(jī)ID查詢的場(chǎng)景。
這里我使用從35開始遞增的ID進(jìn)行刪除。
這里使用了select的用例部分,隨機(jī)ID,然后更新name字段,隨機(jī)10個(gè)長度的字符串。
這里用到了 FunTester 字段都是隨機(jī)生成。
到這里可以看出,性能測(cè)試框架用到的都是gorm框架的基礎(chǔ)API使用,這里MySQL連接池的管理工作完全交給了gorm框架完成,看資料說非常牛逼,我們只需要設(shè)置幾個(gè)參數(shù)。這個(gè)使用體現(xiàn)很像 HttpClient 設(shè)置 HTTP 連接池類似,這里我們也可以看出這些優(yōu)秀的框架使用起來都是非常簡(jiǎn)單的。
PS:關(guān)于gorm的基礎(chǔ)使用的請(qǐng)參考上一期的文章Go語言gorm框架MySQL實(shí)踐。
在正常的測(cè)試中,當(dāng)我們需要進(jìn)行接口測(cè)試時(shí),通常使用接口調(diào)試工具,如postman進(jìn)行接口測(cè)試
目前我在嘗試使用Go語言進(jìn)行接口測(cè)試,使用的庫均為Go自帶的庫。
注:當(dāng)前采用的接口為時(shí)事新聞接口,每天可以請(qǐng)求100次,需要的同學(xué),可以自行使用。
語料庫文件以特殊格式編碼。這是種子語料庫和生成語料庫的相同格式。
下面是一個(gè)語料庫文件的例子:
第一行用于通知模糊引擎文件的編碼版本。雖然目前沒有計(jì)劃未來版本的編碼格式,但設(shè)計(jì)必須支持這種可能性。
下面的每一行都是構(gòu)成語料庫條目的值,如果需要,可以直接復(fù)制到 Go 代碼中。
在上面的示例中,我們?cè)?a []byte后跟一個(gè)int64。這些類型必須按順序與模糊測(cè)試參數(shù)完全匹配。這些類型的模糊目標(biāo)如下所示:
指定您自己的種子語料庫值的最簡(jiǎn)單方法是使用該 (*testing.F).Add方法。在上面的示例中,它看起來像這樣:
但是,您可能有較大的二進(jìn)制文件,您不希望將其作為代碼復(fù)制到您的測(cè)試中,而是作為單獨(dú)的種子語料庫條目保留在 testdata/fuzz/{FuzzTestName} 目錄中。golang.org/x/tools/cmd/file2fuzz 上的file2fuzz工具可用于將這些二進(jìn)制文件轉(zhuǎn)換為為[]byte.
要使用此工具:
語料庫條目:語料庫 中的一個(gè)輸入,可以在模糊測(cè)試時(shí)使用。這可以是特殊格式的文件,也可以是對(duì) (*testing.F).Add。
覆蓋指導(dǎo): 一種模糊測(cè)試方法,它使用代碼覆蓋范圍的擴(kuò)展來確定哪些語料庫條目值得保留以備將來使用。
失敗的輸入:失敗的輸入是一個(gè)語料庫條目,當(dāng)針對(duì) 模糊目標(biāo)運(yùn)行時(shí)會(huì)導(dǎo)致錯(cuò)誤或恐慌。
fuzz target: 模糊測(cè)試的目標(biāo)功能,在模糊測(cè)試時(shí)對(duì)語料庫條目和生成的值執(zhí)行。它通過將函數(shù)傳遞給 (*testing.F).Fuzz實(shí)現(xiàn)。
fuzz test: 測(cè)試文件中的一個(gè)被命名為func FuzzXxx(*testing.F)的函數(shù),可用于模糊測(cè)試。
fuzzing: 一種自動(dòng)化測(cè)試,它不斷地操縱程序的輸入,以發(fā)現(xiàn)代碼可能容易受到的錯(cuò)誤或漏洞等問題。
fuzzing arguments: 將傳遞給 模糊測(cè)試目標(biāo)的參數(shù),并由mutator進(jìn)行變異。
fuzzing engine: 一個(gè)管理fuzzing的工具,包括維護(hù)語料庫、調(diào)用mutator、識(shí)別新的覆蓋率和報(bào)告失敗。
生成的語料庫: 由模糊引擎隨時(shí)間維護(hù)的語料庫,同時(shí)模糊測(cè)試以跟蹤進(jìn)度。它存儲(chǔ)在$GOCACHE/fuzz 中。這些條目?jī)H在模糊測(cè)試時(shí)使用。
mutator: 一種在模糊測(cè)試時(shí)使用的工具,它在將語料庫條目傳遞給模糊目標(biāo)之前隨機(jī)操作它們。
package: 同一目錄下編譯在一起的源文件的集合。
種子語料庫: 用戶提供的用于模糊測(cè)試的語料庫,可用于指導(dǎo)模糊引擎。它由 f.Add 在模糊測(cè)試中調(diào)用提供的語料庫條目以及包內(nèi) testdata/fuzz/{FuzzTestName} 目錄中的文件組成。這些條目默認(rèn)使用go test運(yùn)行,無論是否進(jìn)行模糊測(cè)試。
測(cè)試文件: 格式為 xxx_test.go 的文件,可能包含測(cè)試、基準(zhǔn)、示例和模糊測(cè)試。
漏洞: 代碼中的安全敏感漏洞,可以被攻擊者利用。
作為一個(gè)測(cè)試,作為一個(gè)測(cè)試開發(fā), 全棧化+管理 是我們未來的發(fā)展方向。已經(jīng)掌握了Java、Python、HTML的你,是不是也想了解下最近異常火爆的Go語言呢?來吧,讓我們一起了解下。
Go 是一個(gè)開源的編程語言 ,它能讓構(gòu)造簡(jiǎn)單、可靠且高效的軟件變得容易。
Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā),后來還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時(shí)候發(fā)布了Go 1穩(wěn)定版本。現(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個(gè)活躍的社區(qū)。這三個(gè)人都是計(jì)算機(jī)界的大神,有的參與了C語言的編寫,有的還是數(shù)學(xué)大神,有的還獲得了計(jì)算機(jī)最高榮譽(yù)-圖靈獎(jiǎng)。
接下來說說 Go語言的特色 :
簡(jiǎn)潔、快速、安全
并行、有趣、開源
內(nèi)存管理、數(shù)組安全、編譯迅速
Go語言的用途 :
Go 語言被設(shè)計(jì)成一門應(yīng)用于搭載 Web 服務(wù)器,存儲(chǔ)集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言。
對(duì)于高性能分布式系統(tǒng)領(lǐng)域而言,Go 語言無疑比大多數(shù)其它語言有著更高的開發(fā)效率。它提供了海量并行的支持,這對(duì)于 游戲 服務(wù)端的開發(fā)而言是再好不過了。
Go語言的環(huán)境安裝:
建議直接打開 官方地址因?yàn)閴Φ脑虼虿婚_
因?yàn)槲矣玫氖莣indows系統(tǒng),這里主要講下Windows系統(tǒng)上使用Go語言來編程。
Windows 下可以使用 .msi 后綴(在下載列表中可以找到該文件,如go1.17.2.windows-amd64.msi)的安裝包來安裝。
默認(rèn)情況下 .msi 文件會(huì)安裝在 c:Go 目錄下。你可以將 c:Gobin 目錄添加到 Path 環(huán)境變量中。添加后你需要重啟命令窗口才能生效。個(gè)人建議還是安裝到 Program Files文件夾中。
使用什么開發(fā)工具來對(duì)Go語言進(jìn)行編寫:
個(gè)人建議用VS code, 也可以用Sublime Text來編輯。如果你之前看了我講的HTML語言的學(xué)習(xí),肯定已經(jīng)下載了VS code. 那么這時(shí)你需要在VS code中下載Go語言的擴(kuò)展插件。
這里有一個(gè)巨大的坑,就是在下載Go的插件和依賴包時(shí),會(huì)提示一些包沒有。主要是因?yàn)橄螺d的依賴包部分被墻了,只能想別的辦法去下載。
建議參考網(wǎng)頁:
解決vscode中g(shù)olang插件安裝失敗方法
在學(xué)習(xí)go的過程中,使用的是vscode,但是一直提示安裝相關(guān)插件失敗,然后上網(wǎng)查方法,基本上是叫你建立golang.org目錄什么的,結(jié)果全是錯(cuò)的,而且都是抄襲,很煩。無意之中看到一位博主分享的方法,他也是飽受上述的垃圾博文困擾,然后找到了解決方法,這里向他致敬,秉著讓更多人看到正確解決方法的心,我寫下正確的解決方法,希望對(duì)你有所幫助,也可以點(diǎn)開原博主鏈接參考:
Go有一個(gè)全球模塊代理,設(shè)置代理再去安裝golang的插件,就可以安裝成功了。步驟有,首先Windows用戶打開Powershell,一個(gè)藍(lán)色的界面,注意不是cmd!不知道的直接打開window下面的搜索,然后輸入powershell,搜索出來就可以了。
$env:GO111MODULE=“on”
$env:GOPROXY=“”
go env -w GOPROXY=
go env -w GOPRIVATE=*.corp.example.com
然后我們打開VsCode界面,下面會(huì)提示安裝插件,我們選擇Install ALL,就會(huì)安裝成功
當(dāng)你在運(yùn)行Go語言程序時(shí),提示所有的插件包都已經(jīng)安裝成功了時(shí),就可以正常使用了,要不然一堆報(bào)錯(cuò)會(huì)讓你非常心煩。
好了,今天先到這里,晚安、下班~
Go語言也稱 Golang,兼具效率、性能、安全、健壯等特性。這套Go語言教程(Golang教程)通俗易懂,深入淺出,既適合沒有基礎(chǔ)的讀者快速入門,也適合工作多年的程序員查閱知識(shí)點(diǎn)。
Go 語言
這套教程在講解一些知識(shí)點(diǎn)時(shí),將 Go 語言和其他多種語言進(jìn)行對(duì)比,讓掌握其它編程語言的讀者能迅速理解 Go 語言的特性。Go語言從底層原生支持并發(fā),無須第三方庫、開發(fā)者的編程技巧和開發(fā)經(jīng)驗(yàn)就可以輕松搞定。
Go語言(或 Golang)起源于 2007 年,并在 2009 年正式對(duì)外發(fā)布。Go 是非常年輕的一門語言,它的主要目標(biāo)是“兼具 Python 等動(dòng)態(tài)語言的開發(fā)速度和 C/C++ 等編譯型語言的性能與安全性”。
Go語言是編程語言設(shè)計(jì)的又一次嘗試,是對(duì)類C語言的重大改進(jìn),它不但能讓你訪問底層操作系統(tǒng),還提供了強(qiáng)大的網(wǎng)絡(luò)編程和并發(fā)編程支持。Go語言的用途眾多,可以進(jìn)行網(wǎng)絡(luò)編程、系統(tǒng)編程、并發(fā)編程、分布式編程。
Go語言的推出,旨在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,具有“部署簡(jiǎn)單、并發(fā)性好、語言設(shè)計(jì)良好、執(zhí)行性能好”等優(yōu)勢(shì),目前國內(nèi)諸多 IT 公司均已采用Go語言開發(fā)項(xiàng)目。Go語言有時(shí)候被描述為“C 類似語言”,或者是“21 世紀(jì)的C語言”。Go 從C語言繼承了相似的表達(dá)式語法、控制流結(jié)構(gòu)、基礎(chǔ)數(shù)據(jù)類型、調(diào)用參數(shù)傳值、指針等很多思想,還有C語言一直所看中的編譯后機(jī)器碼的運(yùn)行效率以及和現(xiàn)有操作系統(tǒng)的無縫適配。
因?yàn)镚o語言沒有類和繼承的概念,所以它和 Java 或 C++ 看起來并不相同。但是它通過接口(interface)的概念來實(shí)現(xiàn)多態(tài)性。Go語言有一個(gè)清晰易懂的輕量級(jí)類型系統(tǒng),在類型之間也沒有層級(jí)之說。因此可以說Go語言是一門混合型的語言。
此外,很多重要的開源項(xiàng)目都是使用Go語言開發(fā)的,其中包括 Docker、Go-Ethereum、Thrraform 和 Kubernetes。Go 是編譯型語言,Go 使用編譯器來編譯代碼。編譯器將源代碼編譯成二進(jìn)制(或字節(jié)碼)格式;在編譯代碼時(shí),編譯器檢查錯(cuò)誤、優(yōu)化性能并輸出可在不同平臺(tái)上運(yùn)行的二進(jìn)制文件。要?jiǎng)?chuàng)建并運(yùn)行 Go 程序,程序員必須執(zhí)行如下步驟。
使用文本編輯器創(chuàng)建 Go 程序;
保存文件;編譯程序;運(yùn)行編譯得到的可執(zhí)行文件。
這不同于 Python、Ruby 和 JavaScript 等語言,它們不包含編譯步驟。Go 自帶了編譯器,因此無須單獨(dú)安裝編譯器。
鏈喬教育在線旗下學(xué)碩創(chuàng)新區(qū)塊鏈技術(shù)工作站是中國教育部學(xué)校規(guī)劃建設(shè)發(fā)展中心開展的“智慧學(xué)習(xí)工場(chǎng)2020-學(xué)碩創(chuàng)新工作站 ”唯一獲準(zhǔn)的“區(qū)塊鏈技術(shù)專業(yè)”試點(diǎn)工作站。專業(yè)站立足為學(xué)生提供多樣化成長路徑,推進(jìn)專業(yè)學(xué)位研究生產(chǎn)學(xué)研結(jié)合培養(yǎng)模式改革,構(gòu)建應(yīng)用型、復(fù)合型人才培養(yǎng)體系。
網(wǎng)站標(biāo)題:go語言測(cè)試教程 go語言教程推薦
文章起源:http://m.kartarina.com/article16/hgecdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、、營銷型網(wǎng)站建設(shè)、外貿(mào)建站、手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)