校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > golang讀取文件的常用方法總結

golang讀取文件的常用方法總結

熱門標簽:廣州呼叫中心外呼系統 南通如皋申請開通400電話 中國地圖標注省會高清 地圖標注的汽車標 西部云谷一期地圖標注 學海導航地圖標注 江西轉化率高的羿智云外呼系統 高德地圖標注口訣 浙江高速公路地圖標注

使用go語言讀取文件的各種方式整理。

一次性加載到內存中

// * 整個文件讀到內存,適用于文件較小的情況
//每次讀取固定字節
//問題容易出現亂碼,因為中文和中文符號不占一個字符
func readAllIntoMemory(filename string) (content []byte, err error) {
 fp, err := os.Open(filename) // 獲取文件指針
 if err != nil {
 return nil, err
 }
 defer fp.Close()
 fileInfo, err := fp.Stat()
 if err != nil {
 return nil, err
 }
 buffer := make([]byte, fileInfo.Size())
 _, err = fp.Read(buffer) // 文件內容讀取到buffer中
 if err != nil {
 return nil, err
 }
 return buffer, nil
}

一次性加載到內存中適用于小文件。 如果文件太大, 內存緊張的情況下, 可以借助緩沖, 分多次讀取。

分塊讀取

// * 一塊一塊地讀取, 即給一個緩沖, 分多次讀到緩沖中
//按字節讀取,將整個文件讀取到緩沖區buffer
func readByBlock(filename string) (content []byte, err error) {
 fp, err := os.Open(filename) // 獲取文件指針
 if err != nil {
 return nil, err
 }
 defer fp.Close()
 const bufferSize = 64 // 緩沖大小, 每次讀取64個字節
 buffer := make([]byte, bufferSize)
 for {
 // 注意這里要取bytesRead, 否則有問題
 bytesRead, err := fp.Read(buffer) // 文件內容讀取到buffer中
 content = append(content, buffer[:bytesRead]...)
 if err != nil {
  if err == io.EOF {
  err = nil
  break
  } else {
  return nil, err
  }
 }
 }
 return
}

有時我們也需要按行處理

按行讀

// 逐行讀取, 一行是一個[]byte, 多行就是[][]byte
func readByLine(filename string) (lines [][]byte, err error) {
 fp, err := os.Open(filename) // 獲取文件指針
 if err != nil {
 return nil, err
 }
 defer fp.Close()
 bufReader := bufio.NewReader(fp)
 for {
 line, _, err := bufReader.ReadLine() // 按行讀
 if err != nil {
  if err == io.EOF {
  err = nil
  break
  }
 } else {
  lines = append(lines, line)
 }
 }
 return
}

使用ioutil讀取文件的所有內容

func test1() {
 bytes,err := ioutil.ReadFile("filetoread.txt")
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println("total bytes read:",len(bytes))
 fmt.Println("string read:",string(bytes))
}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

您可能感興趣的文章:
  • golang文件讀取-按指定BUFF大小讀取方式
  • golang逐行讀取文件的操作
  • Golang 實現分片讀取http超大文件流和并發控制
  • 淺談Golang是如何讀取文件內容的(7種)
  • golang 使用 viper 讀取自定義配置文件
  • 如何利用Golang解析讀取Mysql備份文件
  • Golang 實現超大文件讀取的兩種方法

標簽:曲靖 德宏 常州 貴州 東營 許昌 吐魯番 保定

巨人網絡通訊聲明:本文標題《golang讀取文件的常用方法總結》,本文關鍵詞  golang,讀取,文件,的,常用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang讀取文件的常用方法總結》相關的同類信息!
  • 本頁收集關于golang讀取文件的常用方法總結的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 东方市| 瑞安市| 麦盖提县| 西城区| 眉山市| 陵水| 南宁市| 宜兴市| 乐至县| 宁安市| 芜湖县| 农安县| 通道| 廉江市| 蓬安县| 库伦旗| 柳江县| 申扎县| 宁蒗| 革吉县| 滨海县| 三门峡市| 兴义市| 永安市| 永春县| 锡林郭勒盟| 巴彦县| 平罗县| 丰都县| 崇仁县| 叶城县| 谢通门县| 海门市| 灯塔市| 嵩明县| 綦江县| 那曲县| 泸州市| 通许县| 习水县| 清远市|