Como manter arquivos na memória - transferindo arquivos entre servidores sem armazená-los localmente
Estou no processo de escrever uma ferramenta de implantação simples que precisa pegar arquivos tar do s3, extraí-los e enviá-los ao nosso servidor de teste. Eu gostaria de fazer isso sem armazenar os arquivos localmente, mantendo-os na memória.
Aqui está o meu código para baixar arquivos do s3
func s3downloadFile(downloader *s3manager.Downloader, item string) {
localitem := strings.Replace(item, s3base, "", -1)
os.MkdirAll(path.Dir(localitem), os.ModePerm)
file, err := os.Create(localitem)
if err != nil {
exitErrorf("Unable to open file %q, %v", err)
}
defer file.Close()
numBytes, err := downloader.Download(file,
&s3.GetObjectInput{
Bucket: aws.String(s3bucket),
Key: aws.String(item),
})
if err != nil {
exitErrorf("Unable to download item %q, %v", item, err)
}
fmt.Println("Downloaded", file.Name(), numBytes, "bytes")
}
Gostaria de evitar a criação de diretórios e arquivos neste exemplo e apenas manter tudo na memória. Eu deixei de fora a etapa que extrai os arquivos do meu código. O próximo passo seria fazer o upload dos arquivos comgo-scp igual a:
// Finaly, copy the file over
// Usage: CopyFile(fileReader, remotePath, permission)
client.CopyFile(f, "/path/to/remote/file", "0655")
Minha pergunta então focaria nofile, err := os.Create(localitem)
Como parte deste código, como posso manter um leitor de arquivos na memória em vez de armazenar o arquivo localmente?