Les prochains concerts de mon groupe sont stockés dans DynamoDB et j'ai le code suivant :
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 }
Cependant, j'obtiens l'erreur suivante dans le paramètre UnmarshalListOfMaps()
中的 response.Items
:
无法使用“response.Items”(类型[]map[string]*AttributeValue)作为类型[]map[string]types.AttributeValue
Je suis encore un peu nouveau dans la syntaxe Go et je ne suis pas sûr de comprendre l'inadéquation entre ce qui est transmis et ce qui est attendu. Toute aide serait grandement appréciée.
semble UnmarshalListOfMaps
函数期望的内容与您提供的内容之间存在类型不匹配。该错误消息表明该函数需要 []map[string]types.AttributeValue
类型的参数,但 response.Items
的类型为 []map[string]*AttributeValue
.
La solution est de convertir response.Items
au type correct ou d'utiliser la signature de type correcte pour votre tranche.
Voici comment résoudre ce problème :
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) } }
Assurez-vous de disposer de la logique d'initialisation du client DynamoDB appropriée (commentée dans la fonction main
) pour établir la connexion à DynamoDB.
Le code fourni décompose désormais correctement la réponse en fragments de pointeurs vers Show
structures.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!