以固定的跨度读取golang缓冲区中的字节

I'd like to read and process 1024 bytes at a time in my file given by filename. I don't understand how to construct the outer loop correctly, especially to accommodate the final stride in which the buffer will contain fewer than 1024 bytes

What I have tried:

fs, _ := os.Open(filename)
defer fs.Close()
n := 1024 // 1kb
buff := make([]byte, n)
for {
    buff = make([]byte, n) // is this initialized correctly?
    n1, err := fs.Read(buff)
    if err != nil {
        if err == io.EOF {
            break
        }
        fmt.Println(err)
        break
    }
    fmt.Println("read n1 bytes...", n1)
    fmt.Println("%v", buff)
  }

It has produced the following errors:

  • 'buff declared and not used', which doesn't make sense to me as it is clearly right there
  • 'n1 declared and not used'
  • "invalid argument"

I have seen the following resources:

I'd like to read and process 1024 bytes at a time in my file given by filename.

I would expect to see something like this:

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
)

func main() {
    filename := `test.file`
    f, err := os.Open(filename)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()
    r := bufio.NewReader(f)
    buf := make([]byte, 0, 1024)
    for {
        n, err := io.ReadFull(r, buf[:cap(buf)])
        buf = buf[:n]
        if err != nil {
            if err == io.EOF {
                break
            }
            if err != io.ErrUnexpectedEOF {
                fmt.Println(err)
                break
            }
        }
        fmt.Println("read n bytes...", n)
        // process buf
    }
}

Output:

read n bytes... 1024
read n bytes... 1024
read n bytes... 1024
read n bytes... 80