本文目錄一覽:
Golang中讀取文件最常見的錯誤
使用文件名作為輸入
另一個常見錯誤是將文件名傳遞給函數。
假設我們必須實現一個函數來計算文件中的空行數。最自然的實現是這樣的:
filename 作為輸入給出,所以我們打開它然後我們實現我們的邏輯,對吧?
現在,假設我們希望在此函數之上實現 單元測試 ,以使用普通文件,空文件,具有不同編碼類型的文件等進行測試。很容易變得非常難以管理。
此外,如果我們想要實現相同的邏輯但是對於HTTP主體,例如,我們將不得不為此創建另一個函數。
Go有兩個很棒的抽象: io.Reader 和 io.Writer 。相反,通過一個文件名,我們可以簡單地傳遞一個 io.Reader 作為 抽象 的數據源。
它是文件嗎?一個HTTP正文?位元組緩衝區?這並不重要,因為我們仍然會使用相同的 Read 方法。
在我們的例子中,我們甚至可以緩衝輸入以逐行讀取它。所以,我們可以使用 bufio.Reader 它的 ReadLine 方法:
現在,打開文件本身的責任委託給 count 客戶:
使用第二種實現,無論 實際數據源 如何,都可以調用該函數。同時,它將 促進 我們的單元測試,因為我們可以簡單地創建一個 bufio.Reader 來自 string :
翻譯自:
golang文件操作-讀操作的常見方式匯總
ioutil的方式能夠讀取整個文件,只需傳入文件名,操作簡單。該操作方式需要把文件讀入內容,效率高,同樣佔用內存也高
該操作同樣可看作按行讀取,將數據讀入緩衝區
另外一種方式為ReadBytes,與readString的區別為返回格式為切片類型
golang (*bufio.Reader)的讀取方法
bufReader.ReadBytes(‘\n’)和 bufReader.ReadString(‘\n’)在讀到文件最後一行時,會同時返回內容line和io.EOF。而bufReader.Read()讀取到末尾時,會先返回內容,然後再下一次迭代時才返回io.EOF
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232291.html