2 回答
TA贡献1860条经验 获得超9个赞
将值编码为字节并上传字节。下面介绍如何将值编码为 JSON 字节:
func Save(client S3Client, value interface{}, key string) error {
p, err := json.Marshal(value)
if err != nil {
return err
}
input := &s3.PutObjectInput{
Body: aws.ReadSeekCloser(bytes.NewReader(p)),
…
}
…
}
使用要上传的值调用保存:
value := &Event{ID: "an id", …}
err := Save(…, value, …)
if err != nil {
// handle error
}
有很多可能,包括gob,xml和json,msgpack等。最佳编码格式将取决于您的应用程序要求。
获取对象时反转该过程:
func GetIt(client S3Client, T interface{}, key string) error {
svc := client.S3clientObject
resp, err := svc.GetObject(&s3.GetObjectInput{
Bucket: aws.String(GetS3Bucket()),
Key: aws.String(key),
})
if err != nil {
return err
}
return json.NewDecoder(resp.Body).Decode(T)
}
使用指向目标值的指针调用 GetIt:
var value model.Event
err := GetIt(client, &value, key)
if err != nil {
// handle error
}
fmt.Println(value) // prints the decoded value.
TA贡献1830条经验 获得超9个赞
此处引用的示例表明,S3 允许您上传实现 io 的任何内容。读取器接口。该示例使用语法创建一个知道如何向调用方提供指定字符串的语法。您的工作(根据此处的AWS)是弄清楚如何将您需要存储的任何内容调整为.strings.NewReaderio.Readerio.Reader
您可以直接存储JSON编码的字节,如下所示
package main
import (
"bytes"
"encoding/json"
)
type Event struct {
ID string
ProcessID string
TxnID string
Inputs map[string]interface{}
}
func main() {
// To prepare the object for writing
b, err := json.Marshal(event)
if err != nil {
return
}
// pass this reader into aws.ReadSeekCloser(...)
reader := bytes.NewReader(b)
}
- 2 回答
- 0 关注
- 151 浏览
添加回答
举报