io.Copy причина не может выделить память в Голанге - PullRequest
1 голос
/ 24 мая 2019

Я использую сжатие / 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

Файл zip 300M, разархивированный файл5G.Память: 2048M.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...