当前位置 博文首页 > golang文件读取-按指定BUFF大小读取方式

    golang文件读取-按指定BUFF大小读取方式

    作者:robertkun 时间:2021-02-04 12:18

    a.txt文件内容:

    ABCDEFGHI

    HELLO GOLANG

    package main
    import (
      "fmt"
      "os"
      "io"
    )
    func main() {
      fileName := "C:\\Robert\\日志分析\\tools_go\\vdn_sqlInterface\\a.txt"
      file, err := os.OpenFile(fileName, os.O_RDWR, 0666)
      if err != nil {
        fmt.Println("Open file error!", err)
        return
      }
      defer file.Close()
      stat, err := file.Stat()
      if err != nil {
        panic(err)
      }
      var size = stat.Size()
      fmt.Println("file size=", size)
      // define read block size = 2
      buf := make([]byte, 2)
      for {
        length, err := file.Read(buf)
        if err != nil {
          if err == io.EOF {
            break
          } else {
            fmt.Println("Read file error!", err)
            return
          }
        }
        fmt.Println(length, string(buf))
      }
      fmt.Println("File read ok!")
    }
    

    输出:

    每次读取2个字节的大小并输出

    file size= 23
    2 AB
    2 CD
    2 EF
    2 GH
    2 I
    2
    H
    2 EL
    2 LO
    2 G
    2 OL
    2 AN
    1 GN
    File read ok!
    

    补充:golang 数组append前后的地址变化

    我就废话不多说了,大家还是直接看代码吧~

    func main() {
     res := make([]int, 0)
     res = append(res, 1) //同函数内append前后地址不变
     for i, v := range res {
     println(i,v)
     }
    }
    

    打印:

    0 1

    func solve(res []int) {
     res = append(res, 1) //不在同一函数内append前后地址变
    }
     
    func main() {
     res := make([]int, 0)
     for i, v := range res {
     println(i,v)
     }
    }

    打印:

    因为append改变了原res的地址。所以改为:

    func solve(res []int) []int {
     return append(res, 1)
    }
     
    func main() {
     res := make([]int, 0)
     for i, v := range solve(res) {
     println(i,v)
     }
    }

    打印:

    0 1

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持站长博客。如有错误或未考虑完全的地方,望不吝赐教。

    js
    下一篇:没有了