Golang?使用os?庫的?ReadFile()?讀文件最佳實(shí)踐
前言
在 Go 中,os 庫的 ReadFile() 方法經(jīng)常用作讀文件,相比其他這個方法很方便,無需關(guān)心 close 文件等一些工作。
下面列出三種常見的讀文件場景:
1. 讀取整個文件到內(nèi)存中
使用 os 庫的 ReadFile() 可以把整個文件讀到內(nèi)存中,在日常開發(fā)中,這是讀文件使用頻率最多的方法,也是最基本一個函數(shù)。下面代碼展示了如何使用這個函數(shù)。
package main import ( "log" "os" ) func main() { data, err := os.ReadFile("./file.txt") if err != nil { log.Fatalf("File reading error: %v", err) } log.Printf("Contents of file: %s", string(data)) }
2. 讀取特定字節(jié)數(shù)據(jù)到內(nèi)存中
當(dāng)文件過大時,讀取整個文件到內(nèi)存中會把內(nèi)存打爆,鑒于這種情況,我們可以把整個文件分成特定 chunks,也就是塊,然后分塊讀取,下面代碼展示了把 3 個 byte 組成一個 chunk,然后再讀取。
package main import ( "bufio" "io" "log" "os" ) func main() { f, err := os.Open("./file.txt") if err != nil { log.Fatal(err) } defer f.Close() // 初始化 reader 讀文件 r := bufio.NewReader(f) // 初始化 3 個 byte slice,每次讀取 3 個 byte b := make([]byte, 3) // 循環(huán)讀取,直到讀到文件的結(jié)尾, for { n, err := r.Read(b) if err == io.EOF { break } if err != nil { log.Fatalf("Error reading file: %v", err) break } log.Printf("the Content is: %s", string(b[0:n])) } }
3. 按行讀取文件到內(nèi)存中
我們也可以按行分割整個文件,然后一行行讀取到內(nèi)存中,這種方法也可以減少內(nèi)存的壓力
package main import ( "bufio" "log" "os" ) func main() { f, err := os.Open("./file.txt") if err != nil { log.Fatal(err) } defer f.Close() // 以這個文件為參數(shù),創(chuàng)建一個 scanner s := bufio.NewScanner(f) // 掃描每行文件,按行讀取 for s.Scan() { log.Printf("the Content is: %s", s.Text()) } err = s.Err() if err != nil { log.Fatal(err) } }
到此這篇關(guān)于Golang 使用os 庫的 ReadFile() 讀文件最佳實(shí)踐的文章就介紹到這了,更多相關(guān)Golang讀文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
gin自定義中間件解決requestBody不可重復(fù)讀問題(最新推薦)
這篇文章主要介紹了gin自定義中間件解決requestBody不可重復(fù)讀問題,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04Go 數(shù)據(jù)結(jié)構(gòu)之堆排序示例詳解
這篇文章主要為大家介紹了Go 數(shù)據(jù)結(jié)構(gòu)之堆排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Go中阻塞以及非阻塞操作實(shí)現(xiàn)(Goroutine和main Goroutine)
本文主要介紹了Go中阻塞以及非阻塞操作實(shí)現(xiàn)(Goroutine和main Goroutine),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05go語言開發(fā)環(huán)境安裝及第一個go程序(推薦)
這篇文章主要介紹了go語言開發(fā)環(huán)境安裝及第一個go程序,這篇通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02golang值類型轉(zhuǎn)換成[]uint8類型的操作
這篇文章主要介紹了golang值類型轉(zhuǎn)換成[]uint8類型的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05