io.Copy原因无法在golang中分配内存

时间:2019-05-24 08:00:31

标签: go

我使用compress / gzip解压缩文件

func DecompressZip(src string, target string) error {
    f, err := os.Open(src)
    if err != nil {
        return errors.Wrap(err, "can't open tar source file:"+src)
    }
    defer f.Close()
    zipReader, err := gzip.NewReader(f)
    if err != nil {
        return errors.Wrap(err, "can't gzip source file"+src)
    }
    defer zipReader.Close()
    unzipFile, err := CreateFileAnyway(target) // return *os.file
    if err != nil {
        return errors.Wrap(err, "can't create target file"+target)
    }
    defer unzipFile.Close()
    if _, err := io.Copy(unzipFile, zipReader); err != nil {
        return errors.Wrap(err, "can't unzip to file :"+target)
    }
    return nil
}

func CreateFileAnyway(path string) (*os.File, error) {
    if _, err := os.Stat(path); err == nil {
        return os.Create(path)
    } else {
        i := len(path)
        for i > 0 && !os.IsPathSeparator(path[i-1]) {
            i--
        }
        if i > 0 {
            if err := os.MkdirAll(path[:i], 0777); err != nil {
                return nil, err
            }
        }
        return os.Create(path)
    }
}

此代码在io.Copy上记录了一个错误,日志: can't unzip to file :***: write ***: cannot allocate memory

压缩文件300M,未压缩文件为5G。 内存:2048M。

0 个答案:

没有答案