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.
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!