Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyahmarshal hasil pertanyaan PartiQL dengan betul dalam Go menggunakan sdk AWS?

Bagaimana untuk menyahmarshal hasil pertanyaan PartiQL dengan betul dalam Go menggunakan sdk AWS?

WBOY
WBOYke hadapan
2024-02-12 16:12:12491semak imbas

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

Kandungan soalan

Rancangan kumpulan saya yang akan datang disimpan dalam DynamoDB dan saya mempunyai kod berikut:

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
}

Walau bagaimanapun, saya mendapat ralat berikut dalam parameter UnmarshalListOfMaps() 中的 response.Items:

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

Saya masih baru dalam sintaks Go dan saya tidak pasti saya memahami ketidakpadanan antara perkara yang diterima dan yang dijangkakan. Sebarang bantuan amatlah dihargai.

Penyelesaian

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

Penyelesaian adalah untuk menukar response.Items kepada jenis yang betul atau gunakan tandatangan jenis yang betul untuk kepingan anda.

Berikut ialah cara untuk menyelesaikan masalah ini:

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: /* initialize your DynamoDB client here */,
        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)
    }
}

Pastikan anda mempunyai logik permulaan pelanggan DynamoDB yang sesuai (diulas dalam fungsi main) untuk mewujudkan sambungan ke DynamoDB.

Kod yang disediakan kini membongkar respons dengan betul ke dalam serpihan penunjuk kepada Show struktur.

Atas ialah kandungan terperinci Bagaimana untuk menyahmarshal hasil pertanyaan PartiQL dengan betul dalam Go menggunakan sdk AWS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam