package main import "io" type SizableZeroReader struct { sz int } func NewSizableZeroReader(sz int) *SizableZeroReader { r := &SizableZeroReader{sz: sz} return r } func (s *SizableZeroReader) Read(p []byte) (n int, err error) { l := len(p) var al int if s.sz > l { al = l s.sz = s.sz - l } else { al = s.sz s.sz = 0 } for i := 0; i < al; i++ { p[i] = 0 } if al < l { return al, io.EOF } return al, nil } func (s *SizableZeroReader) Close() error { return nil }