1. 程式人生 > 程式設計 >golang檔案讀取-按指定BUFF大小讀取方式

golang檔案讀取-按指定BUFF大小讀取方式

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

列印:

因為append改變了原res的地址。所以改為:

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

列印:

0 1

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。