當(dāng)一個(gè)函數(shù)調(diào)用返回一個(gè)錯(cuò)誤時(shí),調(diào)用者應(yīng)當(dāng)負(fù)責(zé)檢查錯(cuò)誤并采取合適的處理應(yīng)對。根據(jù)情形,將有許多可能的處理場景。接下來我們看 5 個(gè)策略:
為企業(yè)提供網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、網(wǎng)站優(yōu)化、營銷型網(wǎng)站建設(shè)、競價(jià)托管、品牌運(yùn)營等營銷獲客服務(wù)。成都創(chuàng)新互聯(lián)公司擁有網(wǎng)絡(luò)營銷運(yùn)營團(tuán)隊(duì),以豐富的互聯(lián)網(wǎng)營銷經(jīng)驗(yàn)助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營銷獲客難題,做到“讓獲客更簡單”。自創(chuàng)立至今,成功用技術(shù)實(shí)力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營銷”三大難題,同時(shí)降低了營銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認(rèn)可!
Go 語言的錯(cuò)誤處理有特定的規(guī)律。進(jìn)行錯(cuò)誤檢查之后,檢測到失敗的情況往往都在成功之前。如果檢測到的失敗導(dǎo)致函數(shù)返回,成功的邏輯一般不會放在 else 塊中而是在外層的作用域中。函數(shù)會有一種通常的形式,就是在開頭有一連串的檢查來返回錯(cuò)誤,之后跟著實(shí)際的函數(shù)體一直到最后。
go語言 一個(gè)主package包引入同級目錄下go文件包編譯出錯(cuò)是設(shè)置錯(cuò)誤造成的,解決方法為:
1、先使用import "strings"導(dǎo)入strings庫。
2、HasPrefix?判斷字符串?s?是否以?prefix?開頭。
3、HasSuffix?判斷字符串?s?是否以?suffix?結(jié)尾。
4、可以看看判斷的代碼。
5、在cmd下運(yùn)行一下go run test.go,看看如下結(jié)果。
6、Contains?判斷字符串?s?是否包含?substr,也就是判斷一下S是否在strings中。
7、在cmd下運(yùn)行g(shù)o run test.go看看結(jié)果。
使用文件名作為輸入
另一個(gè)常見錯(cuò)誤是將文件名傳遞給函數(shù)。
假設(shè)我們必須實(shí)現(xiàn)一個(gè)函數(shù)來計(jì)算文件中的空行數(shù)。最自然的實(shí)現(xiàn)是這樣的:
filename 作為輸入給出,所以我們打開它然后我們實(shí)現(xiàn)我們的邏輯,對吧?
現(xiàn)在,假設(shè)我們希望在此函數(shù)之上實(shí)現(xiàn) 單元測試 ,以使用普通文件,空文件,具有不同編碼類型的文件等進(jìn)行測試。很容易變得非常難以管理。
此外,如果我們想要實(shí)現(xiàn)相同的邏輯但是對于HTTP主體,例如,我們將不得不為此創(chuàng)建另一個(gè)函數(shù)。
Go有兩個(gè)很棒的抽象: io.Reader 和 io.Writer 。相反,通過一個(gè)文件名,我們可以簡單地傳遞一個(gè) io.Reader 作為 抽象 的數(shù)據(jù)源。
它是文件嗎?一個(gè)HTTP正文?字節(jié)緩沖區(qū)?這并不重要,因?yàn)槲覀內(nèi)匀粫褂孟嗤?Read 方法。
在我們的例子中,我們甚至可以緩沖輸入以逐行讀取它。所以,我們可以使用 bufio.Reader 它的 ReadLine 方法:
現(xiàn)在,打開文件本身的責(zé)任委托給 count 客戶:
使用第二種實(shí)現(xiàn),無論 實(shí)際數(shù)據(jù)源 如何,都可以調(diào)用該函數(shù)。同時(shí),它將 促進(jìn) 我們的單元測試,因?yàn)槲覀兛梢院唵蔚貏?chuàng)建一個(gè) bufio.Reader 來自 string :
翻譯自: