• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang读取文件的常用方法总结

    使用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 实现超大文件读取的两种方法
    上一篇:使用go xorm来操作mysql的方法实例
    下一篇:使用go来操作redis的方法示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang读取文件的常用方法总结 golang,读取,文件,的,常用,