文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用 AWS sdk 在 Go 中正确解组 PartiQL 查询的结果?

2024-02-12 16:53

关注

问题内容

我的乐队即将演出的节目存储在 DynamoDB 中,并且我有以下代码:

type PartiQLRunner struct {
    DynamoDbClient *dynamodb.DynamoDB
    TableName      string
}

func BuildRunner() *PartiQLRunner {
    sess := session.Must(session.NewSessionWithOptions(session.Options{
        SharedConfigState: session.SharedConfigEnable,
    }))

    svc := dynamodb.New(sess)

    return &PartiQLRunner{
        DynamoDbClient: svc,
        TableName:      "SHOWS",
    }
}

type Show struct {
    PK      int    `dynamodbav:"PK"`
    DATE    string `dynamodbav:"DATE"`
    ADDRESS string `dynamodbav:"ADDRESS"`
    VENUE   string `dynamodbav:"VENUE"`
}

func (runner PartiQLRunner) GetShows() ([]Show, error) {
    var shows []Show
    response, err := runner.DynamoDbClient.ExecuteStatement(
        &dynamodb.ExecuteStatementInput{
            Statement: aws.String(fmt.Sprintf("SELECT * FROM \"%v\" WHERE PK = 1", runner.TableName)),
        })
    if err != nil {
        log.Printf("Couldn't get info. Here's why: %v\n", err)
    } else {
        err = attributevalue.UnmarshalListOfMaps(response.Items, &shows)
        if err != nil {
            log.Printf("Couldn't unmarshal response. Here's why: %v\n", err)
        }
    }
    return shows, err
}

但是,我在 UnmarshalListOfMaps() 中的 response.Items 参数中收到以下错误:

无法使用“response.Items”(类型[]map[string]*AttributeValue)作为类型[]map[string]types.AttributeValue

我对 Go 语法仍然有些陌生,我不确定我是否理解传入内容与预期内容之间的不匹配。任何帮助将不胜感激。

解决方法

似乎 UnmarshalListOfMaps 函数期望的内容与您提供的内容之间存在类型不匹配。该错误消息表明该函数需要 []map[string]types.AttributeValue 类型的参数,但 response.Items 的类型为 []map[string]*AttributeValue

解决方案是将 response.Items 转换为正确的类型或为您的切片使用正确的类型签名。

解决此问题的方法如下:

package main

import (
    "fmt"
    "log"

    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb/attributevalue"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
)

type Show struct {
    PK      int    `dynamodbav:"PK"`
    DATE    string `dynamodbav:"DATE"`
    ADDRESS string `dynamodbav:"ADDRESS"`
    VENUE   string `dynamodbav:"VENUE"`
}

type PartiQLRunner struct {
    DynamoDbClient *dynamodb.Client
    TableName      string
}

func (runner PartiQLRunner) GetShows() ([]*Show, error) {
    var shows []*Show

    response, err := runner.DynamoDbClient.ExecuteStatement(
        &dynamodb.ExecuteStatementInput{
            Statement: aws.String(fmt.Sprintf("SELECT * FROM \"%v\" WHERE PK = 1", runner.TableName)),
        })
    if err != nil {
        log.Printf("Couldn't get info. Here's why: %v\n", err)
        return shows, err
    }

    err = attributevalue.UnmarshalListOfMaps(response.Items, &shows)
    if err != nil {
        log.Printf("Couldn't unmarshal response. Here's why: %v\n", err)
        return shows, err
    }

    return shows, nil
}

// The main function is just for demonstration and may not be part of your code
func main() {
    // You will need to initialize your DynamoDbClient and TableName
    runner := PartiQLRunner{
        DynamoDbClient: ,
        TableName:      "YourTableName",
    }

    shows, err := runner.GetShows()
    if err != nil {
        log.Fatalf("Error retrieving shows: %v", err)
    }

    for _, show := range shows {
        fmt.Printf("Show Date: %s, Venue: %s, Address: %s\n", show.DATE, show.VENUE, show.ADDRESS)
    }
}

请确保您具有适当的 DynamoDB 客户端初始化逻辑(在 main 函数中注释掉)来建立与 DynamoDB 的连接。

所提供的代码现在可以正确地将响应解组为指向 Show 结构的指针片段。

以上就是如何使用 AWS sdk 在 Go 中正确解组 PartiQL 查询的结果?的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯