婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 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讀取文件的常用方法總結的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 阿鲁科尔沁旗| 山阳县| 阿城市| 淮南市| 凤冈县| 汝阳县| 延边| 石泉县| 芮城县| 卢氏县| 栾城县| 拉萨市| 青州市| 自治县| 兰坪| 健康| 渝北区| 莱阳市| 安乡县| 寻乌县| 大同县| 沂南县| 吴忠市| 九龙坡区| 和田县| 崇仁县| 闻喜县| 紫金县| 梁平县| 湖南省| 福泉市| 紫金县| 平原县| 巴彦县| 望都县| 睢宁县| 临安市| 阿克苏市| 天等县| 浦县| 盐津县|