从S3获取文档时是否必须使用Golang结构体

从S3获取文档时是否必须使用Golang结构体 大家好, 我只想从 S3 获取一份文档,不需要修改任何字段。我只需要获取该文档并将其传递给另一个 API。 在这种情况下,我是否需要为文档定义一个结构体?如果不需要,那么该文档应该是什么类型? 顺便说一下,我打算使用 GetObject 来获取文档。

例如:使用 map[string]string 可以吗?

2 回复

在我看来,GetObject 返回的是文件的实际数据内容。如果文件包含 JSON,你可以将其解组到 map[string]string(或 map[string]interface{})中,否则,你需要做一些自定义操作才能将其转换为 map

更多关于从S3获取文档时是否必须使用Golang结构体的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在这种情况下,你不需要为文档定义结构体。由于你只是获取文档并直接传递给另一个API,可以将文档作为字节流处理。

示例代码:

package main

import (
    "context"
    "fmt"
    "io"
    "os"

    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
)

func main() {
    // 加载AWS配置
    cfg, err := config.LoadDefaultConfig(context.TODO())
    if err != nil {
        panic(err)
    }

    // 创建S3客户端
    client := s3.NewFromConfig(cfg)

    // 获取对象
    output, err := client.GetObject(context.TODO(), &s3.GetObjectInput{
        Bucket: aws.String("your-bucket-name"),
        Key:    aws.String("your-document-key"),
    })
    if err != nil {
        panic(err)
    }
    defer output.Body.Close()

    // 将文档读取为字节切片
    documentBytes, err := io.ReadAll(output.Body)
    if err != nil {
        panic(err)
    }

    // 现在documentBytes就是你的文档内容
    // 可以直接传递给其他API
    fmt.Printf("文档大小: %d 字节\n", len(documentBytes))
    
    // 如果需要保存到文件
    // err = os.WriteFile("output.pdf", documentBytes, 0644)
}

如果你需要处理JSON文档但不想定义结构体,可以使用map[string]interface{}

import "encoding/json"

// 对于JSON文档
var data map[string]interface{}
err = json.Unmarshal(documentBytes, &data)
if err != nil {
    // 处理错误
}

或者使用interface{}

var data interface{}
err = json.Unmarshal(documentBytes, &data)

使用map[string]string只适用于所有值都是字符串的简单JSON文档。对于包含嵌套对象、数组或不同类型值的文档,应该使用map[string]interface{}interface{}

回到顶部