Die kommenden Shows meiner Band sind in DynamoDB gespeichert und ich habe den folgenden Code:
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 }
Allerdings erhalte ich die folgende Fehlermeldung im UnmarshalListOfMaps()
中的 response.Items
-Parameter:
无法使用“response.Items”(类型[]map[string]*AttributeValue)作为类型[]map[string]types.AttributeValue
Ich bin noch ein bisschen neu in der Go-Syntax und bin mir nicht sicher, ob ich die Diskrepanz zwischen dem, was übergeben wird, und dem, was erwartet wird, verstehe. Jede Hilfe wäre sehr dankbar.
scheint UnmarshalListOfMaps
函数期望的内容与您提供的内容之间存在类型不匹配。该错误消息表明该函数需要 []map[string]types.AttributeValue
类型的参数,但 response.Items
的类型为 []map[string]*AttributeValue
.
Die Lösung besteht darin, response.Items
in den richtigen Typ zu konvertieren oder die richtige Typsignatur für Ihr Slice zu verwenden.
So beheben Sie dieses Problem:
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) } }
Bitte stellen Sie sicher, dass Sie über die entsprechende DynamoDB-Client-Initialisierungslogik (auskommentiert in der main
-Funktion) verfügen, um die Verbindung zu DynamoDB herzustellen.
Der bereitgestellte Code entmarspelt die Antwort jetzt korrekt in Fragmente von Zeigern auf Show
Strukturen.
Das obige ist der detaillierte Inhalt vonWie kann ich die Ergebnisse einer PartiQL-Abfrage in Go mithilfe des AWS SDK korrekt entmarsharieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!