GO语言常用的文件读取方式

本文实例讲述了GO语言常用的文件读取方式。分享给大家供大家参考。具体分析如下:

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

希望本文所述对大家的GO语言程序设计有所帮助。

(0)

相关推荐

  • Golang开发中常用的代码片段汇总

    本文主要总结的是我在编写golang应用时使用到的代码片段,提供出来以备以后使用,也给需要的朋友们以参考学习,下面话不多说,来看看详细介绍: 一.通过http package发送user:passwd信息 发送类似于 curl -u 的请求 client := &http.Client{} req, err := http.NewRequest("GET", <url>, nil) req.SetBasicAuth(<username>, <use

  • Go语言常见哈希函数的使用

    myhash.go /** * Created with IntelliJ IDEA. * User: liaojie * Date: 12-9-8 * Time: 下午3:53 * To change this template use File | Settings | File Templates. */ package main import ( "crypto/md5" "crypto/sha1" "crypto/sha256" &qu

  • Go语言常用字符串处理方法实例汇总

    本文实例汇总了Go语言常用字符串处理方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: package main import (     "fmt"     "strings"     //"unicode/utf8" ) func main() {     fmt.Println("查找子串是否在指定的字符串中")     fmt.Println(" Contains 函数的用法")    

  • GO语言常用的文件读取方式

    本文实例讲述了GO语言常用的文件读取方式.分享给大家供大家参考.具体分析如下: Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查. 一次性读取 小文件推荐一次性读取,这样程序更简单,而且速度最快. 复制代码 代码如下: func ReadAll(filePth string) ([]byte, error) {  f, err := os.Open(filePth)  if err != nil {   return nil, err  } return iouti

  • SpringBoot中5种高大上的yml文件读取方式

    目录 1.Environment 2.YamlPropertiesFactoryBean 3.监听事件 4.SnakeYml 5.jackson-dataformat-yaml 总结 在上一篇文章中,我们从源码角度分析了SpringBoot解析yml配置文件的全流程,那么我们今天就来点实战,总结一下除了烂大街的@Value和@ConfigurationProperties外,还能够通过哪些方式,来读取yml配置文件的内容. 1.Environment 在Spring中有一个类Environmen

  • 一文带你掌握Go语言中的文件读取操作

    目录 os 包 和 bufio 包 os.Open 与 os.OpenFile 以及 File.Read 读取文件操作 bufio.NewReader 和 Reader.ReadString 读取文件操作 小结 os 包 和 bufio 包 Go 标准库的 os 包,为我们提供很多操作文件的函数,如 Open(name) 打开文件.Create(name) 创建文件等函数,与之对应的是 bufio 包,os 包是直接对磁盘进行操作的,而 bufio 包则是带有缓冲的操作,不用每次都去操作磁盘.

  • 将tensorflow模型打包成PB文件及PB文件读取方式

    1. tensorflow模型文件打包成PB文件 import tensorflow as tf from tensorflow.python.tools import freeze_graph with tf.Graph().as_default(): with tf.device("/cpu:0"): config = tf.ConfigProto(allow_soft_placement=True) with tf.Session(config=config).as_defaul

  • 使用springboot打包后的文件读取方式

    目录 springboot打包后的文件读取 文件打包问题 文件读取问题 Springboot打包后读取不到文件 解决办法1 失败.. 解决办法 2 springboot打包后的文件读取 在使用了springboot打包后的项目中,牵扯到项目目录中文件读取工作时,明明在开发时功能正常,但是一到发布到线上环境就会报文件找不到,路径不存在的问题. 由于在开发过程中,文件就在我们本地目录中存在,因此普通正常文件的读写功能不受影响,而一旦打包后,可能会由于我们自己的文件目录放置原因一是没有被正确打包到ja

  • C++文件读取的4种情况汇总

    目录 简介: C++文件读取的一般步骤: 文件读取方法: 第一种方法:采用“<<”运算符 第二种方法:利用<string>中的getline函数,按行读取,这样每一行内的所有空格也可以顺利读取 第三种方法: 利用readFile对象内部的getline方法,这个名字虽然和第二种中的一样,但是传入的参数不同,并不是同一个函数. 第四种方法:利用radeFile内部的get()函数一个个的将字符读出来,遇到EOF时返回False退出while循环,这个过程会读取"endl&q

  • PHP实现类似于C语言的文件读取及解析功能

    本文实例讲述了PHP实现类似于C语言的文件读取及解析功能.分享给大家供大家参考,具体如下: $log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.date('d').'_error.log'; //$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/201701/19_error.log'; i

  • java读取文件和写入文件的方式(简单实例)

    Java代码 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读

  • Go语言文件读取的一些总结

    Go语言在进行文件操作的时候,可以有多种方法.最常见的比如直接对文件本身进行Read和Write: 除此之外,还可以使用bufio库的流式处理以及分片式处理:如果文件较小,使用ioutil也不失为一种方法. 面对这么多的文件处理的方式,那么初学者可能就会有困惑:我到底该用那种?它们之间有什么区别?笔者试着从文件读取来对go语言的几种文件处理方式进行分析. os.File.bufio.ioutil比较 效率测试 文件的读取效率是所有开发者都会关心的话题,尤其是当文件特别大的时候.为了尽可能的展示这

  • C/C++读取大文件数据方式详细讲解

    目录 前言 第一种方法 第二种方法 第三种方法 解决 前言 以前对C语言与C++不够了解时,我无法知道如何完整获取一个文件的所有数据并且不遗漏掉. 在网络上也搜索了很多很多的相关帖子,但是没有一个是真正有用的. 本文章使用C语言进行演示,如需使用C++的话原理为一样的. 以下列出那些没用的代码 第一种方法 // 创建一个变量,然后使用FILE指针打开一个文件 // 用fgetc函数与循环代码不断将数据读取到变量中 uint8_t data[4096]; FILE *fp = fopen("文件路

随机推荐