AWS S3下载文件到struct Golang

时间:2018-12-11 17:41:05

标签: go amazon-s3

我在AWS s3上有一个json文件。我想将它们下载到结构中,而不是文件中。这可能吗?或将数据放入结构后删除文件的方法?我不希望在应用程序中生成额外的文件。

我看到了go example AWS s3 provides here

并阅读将其写入io.WriterAt的go aws s3 docs on the download func  只能是“ io.writerAt”文件类型吗?

我的问题是,当我读取S3 json文件并将数据加载到结构中时,由于我认为io.writerAt必须是文件类型,因此最终还会在应用程序中创建文件。

这是我的代码,该代码读取AWS s3 json文件,创建一个文件(我不想要),然后将其加载到结构中以传递其余代码。

sess, _ := session.NewSession(&aws.Config{
    Region: aws.String(c.AwsLocation),
})
downloader := s3manager.NewDownloader(sess)

doc := "myfile.json" 

file, err := os.Create(doc) //PROBLEM creates file.
//todo err
defer file.Close()

numBytes, err := downloader.Download(file,
    &s3.GetObjectInput{
        Bucket: aws.String(c.AwsBucket),
        Key:    aws.String(doc),
    })
//todo err
fmt.Println("Downloaded", file.Name(), numBytes, "bytes")

//take data, and put in struct
byteValue, _ := ioutil.ReadAll(file)
var output myStruct
json.Unmarshal(byteValue, &output)
return output

1 个答案:

答案 0 :(得分:0)

看起来,golang确实有一个相当于泡菜的https://golang.org/pkg/encoding/gob/

但是我会尽可能使用JSON来做到这一点。您可以很容易地将json解组到结构中(例如https://gist.github.com/dmikalova/5693142)。更重要的是,通过选择更通用的存储格式,您将能够从任何语言读取文件,并且数据将与应用程序内模型不同,这对于云或微服务而言是非常友好的方法。