博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go -- 读取文件内容
阅读量:6832 次
发布时间:2019-06-26

本文共 1374 字,大约阅读时间需要 4 分钟。

Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查。

一次性读取

小文件推荐一次性读取,这样程序更简单,而且速度最快。

代码如下:
func ReadAll(filePth string) ([]byte, error) { f, err := os.Open(filePth) if err != nil {  return nil, err }  return ioutil.ReadAll(f)}

还有更加简单的方法,我经常使用ioutil.ReadFile(filePth)

 

分块读取

可在速度和内存占用之间取得很好的平衡。

代码如下:
package main import ( "bufio" "io" "os")func processBlock(line []byte) { os.Stdout.Write(line)}func ReadBlock(filePth string, bufSize int, hookfn func([]byte)) error { f, err := os.Open(filePth) if err != nil {  return err } defer f.Close() buf := make([]byte, bufSize) //一次读取多少个字节 bfRd := bufio.NewReader(f) for {  n, err := bfRd.Read(buf)  hookfn(buf[:n]) // n 是成功读取字节数  if err != nil { //遇到任何错误立即返回,并忽略 EOF 错误信息   if err == io.EOF {    return nil   }   return err  } } return nil}func main() { ReadBlock("test.txt", 10000, processBlock)}

 

逐行读取

逐行读取有的时候真的很方便,性能可能慢一些,但是仅占用极少的内存空间。

代码如下:
package main import ( "bufio" "io" "os")func processLine(line []byte) { os.Stdout.Write(line)}func ReadLine(filePth string, hookfn func([]byte)) error { f, err := os.Open(filePth) if err != nil {  return err } defer f.Close() bfRd := bufio.NewReader(f) for {  line, err := bfRd.ReadBytes('\n')  hookfn(line) //放在错误处理前面,即使发生错误,也会处理已经读取到的数据。  if err != nil { //遇到任何错误立即返回,并忽略 EOF 错误信息   if err == io.EOF {    return nil   }   return err  } } return nil}func main() { ReadLine("test.txt", processLine)}

 

转载地址:http://yxtkl.baihongyu.com/

你可能感兴趣的文章
面向对象
查看>>
[LeetCode] 526. Beautiful Arrangement
查看>>
获取本机IP,用户代理
查看>>
apple watch 与 iphone 之间的通信方式
查看>>
Ubantu 查看系统资源占用
查看>>
Oracle EBS在编码方式为AL32UTF8时的注意事项
查看>>
linux那些事
查看>>
通信服务器的架构问题
查看>>
所见即所得的游戏界面开发
查看>>
python 学习笔记 五
查看>>
Qt 乱码
查看>>
SpringMVC由浅入深day01_7入门程序小结
查看>>
three.js
查看>>
一个简单的统计图像主颜色的算法(C#源代码)
查看>>
java开发中的重中之重-------mysql(基础篇)
查看>>
While 나가는 법
查看>>
c语言操作符的优先级
查看>>
Codeforces Round #420 (Div. 2) A-E
查看>>
9.4-9.19 h5日记总结
查看>>
mysql支持的存储引擎
查看>>