最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang讀取文件的常用方法總結(jié)

 更新時間:2019年04月01日 17:03:16   作者:思維的深度  
今天小編就為大家分享一篇關于golang讀取文件的常用方法總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

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

一次性加載到內(nèi)存中

// * 整個文件讀到內(nèi)存,適用于文件較小的情況
//每次讀取固定字節(jié)
//問題容易出現(xiàn)亂碼,因為中文和中文符號不占一個字符
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) // 文件內(nèi)容讀取到buffer中
 if err != nil {
 return nil, err
 }
 return buffer, nil
}

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

分塊讀取

// * 一塊一塊地讀取, 即給一個緩沖, 分多次讀到緩沖中
//按字節(jié)讀取,將整個文件讀取到緩沖區(qū)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個字節(jié)
 buffer := make([]byte, bufferSize)
 for {
 // 注意這里要取bytesRead, 否則有問題
 bytesRead, err := fp.Read(buffer) // 文件內(nèi)容讀取到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讀取文件的所有內(nèi)容

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))
}

總結(jié)

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

相關文章

  • 詳解為什么說Golang中的字符串類型不能修改

    詳解為什么說Golang中的字符串類型不能修改

    在接觸Go這么語言,可能你經(jīng)常會聽到這樣一句話。對于字符串不能修改,可能你很納悶,日常開發(fā)中我們對字符串進行修改也是很正常的,為什么又說Go中的字符串不能進行修改呢?本文就來通過實際案例給大家演示一下
    2023-03-03
  • 一文帶你了解Go語言中的函數(shù)

    一文帶你了解Go語言中的函數(shù)

    函數(shù)是編程中不可或缺的組成部分,在本文中,我們將詳細介紹Go語言中函數(shù)的概念和使用方法,包括函數(shù)的定義、參數(shù)和返回值等,需要的可以參考一下
    2023-06-06
  • 解讀unsafe.Pointer和uintptr的區(qū)別

    解讀unsafe.Pointer和uintptr的區(qū)別

    這篇文章主要介紹了解讀unsafe.Pointer和uintptr的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • golang fmt格式“占位符”的實例用法詳解

    golang fmt格式“占位符”的實例用法詳解

    在本篇文章里小編給大家整理的是一篇關于golang fmt格式“占位符”的實例用法詳解內(nèi)容,有興趣的朋友們可以學習下。
    2021-07-07
  • Go語言基礎函數(shù)基本用法及示例詳解

    Go語言基礎函數(shù)基本用法及示例詳解

    這篇文章主要為大家介紹了Go語言基礎函數(shù)基本用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • go語言實現(xiàn)一個簡單的http客戶端抓取遠程url的方法

    go語言實現(xiàn)一個簡單的http客戶端抓取遠程url的方法

    這篇文章主要介紹了go語言實現(xiàn)一個簡單的http客戶端抓取遠程url的方法,實例分析了Go語言http操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • go中的protobuf和grpc使用教程

    go中的protobuf和grpc使用教程

    gRPC 是 Google 公司基于 Protobuf 開發(fā)的跨語言的開源 RPC 框架,這篇文章主要介紹了go中的protobuf和grpc使用教程,需要的朋友可以參考下
    2024-08-08
  • 超全講解Golang中defer關鍵字的用法

    超全講解Golang中defer關鍵字的用法

    本文將從一個資源回收問題引入,引出defer關鍵字,并對其進行基本介紹,從而讓大家對Go語言中的defer有更深入的了解,需要的小伙伴可以學習一下
    2023-05-05
  • Go語言通過smtp發(fā)送郵件的方法

    Go語言通過smtp發(fā)送郵件的方法

    這篇文章主要介紹了Go語言通過smtp發(fā)送郵件的方法,涉及Go語言發(fā)送郵件的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • go slice 擴容實現(xiàn)原理源碼解析

    go slice 擴容實現(xiàn)原理源碼解析

    這篇文章主要為大家介紹了go slice 擴容實現(xiàn)原理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論

长寿区| 兴国县| 罗山县| 青川县| 民丰县| 昆明市| 田阳县| 将乐县| 虹口区| 海宁市| 达孜县| 板桥市| 台中市| 光泽县| 阜城县| 成都市| 历史| 姜堰市| 梅州市| 芒康县| 新疆| 阿荣旗| 政和县| 清河县| 寻甸| 体育| 柯坪县| 济源市| 宁国市| 海林市| 海晏县| 天等县| 镇平县| 准格尔旗| 封丘县| 大石桥市| 章丘市| 二连浩特市| 桦甸市| 铁岭县| 洪洞县|