将uint32数组写入字节片中并获取回来

I'm trying to create a mock for a os.File or to be more specific io.Reader. I want to emulate reading of 128 bits of concrete data without actual reading.

With a single uint32 there is no problems.

Mock:

func (f *FileMock) Read(buf []byte) (n int, err error) {
    binary.BigEndian.PutUint32(buf, uint32(2052))
    return len(buf), nil
}       

Tested method (simplified):

b := make([]byte, 128)                                                      
meta_data := make([]uint32, 4)                                                                                                                                 
_, err = s.Read(b)                                                                          
if err != nil {                                                                             
    // Handle error         
}                                                                                                                                                                                       
binary.Read(bytes.NewBuffer(b), binary.BigEndian, &meta_data)                                                                                                                               
log.Print(meta_data) // Output [2052 0 0 0]

But when I need to mock reading of a uint32 slice PutUint32 is not helpful because it writes to a slice from beginning (overrites previously wrtten data). I tried a bunch of combinations of bytesand binary tools but had no luck every time I can't get the data back from bytes. There is my last attempt (it is not the only):

func (f *FileMock) Read(b []byte) (n int, err error) {
    buf := bytes.NewBuffer(make([]byte, len(b)))
    err = binary.Write(buf, binary.BigEndian, [4]uint32{2051, 123, 28, 28})
    buf.Read(b)
    return len(b), nil
}

With the same tested method as described above I'm obtaining an empty slice [0, 0, 0, 0]. Please note, this is a mock for os.File.Read method so I can't create a new slice of bytes instead of it I need to write my data to an existing slice.

At first I'm wondering how to solve the issue. Also I want to know why there is just [0, 0, 0, 0]?

Grateful for answers!

Slices share an underlying array, you can write (PutUint32) to buf[4:], buf[8:] etc.