package fs import ( "io" "io/fs" ) func ReadFile(fsys fs.FS, name string) ([]byte, error) { if fsys, ok := fsys.(fs.ReadFileFS); ok { return fsys.ReadFile(name) } file, err := fsys.Open(name) if err != nil { return nil, err } var size int if info, err := file.Stat(); err == nil { size64 := info.Size() if int64(int(size64)) == size64 { size = int(size64) } } data := make([]byte, 0, size+1) for { if len(data) >= cap(data) { d := append(data[:cap(data)], 0) data = d[:len(data)] } n, err := file.Read(data[len(data):cap(data)]) data = data[:len(data)+n] if err != nil { if err == io.EOF { err = nil } file.Close() return data, err } } }