如何在aws-sdk-go-v2的DynamoDB中动态给expression.In()传多值?
在aws-sdk-go-v2中给DynamoDB IN表达式动态传值的实现方法
要实现动态传入列表值到IN表达式,你需要将字符串列表转换为expression.ExpressionOperand类型的切片,再通过可变参数展开传递给expression.In函数,具体步骤如下:
- 遍历字符串列表,将每个元素转换为
expression.Value类型,存入切片 - 通过**可变参数展开符
...**将切片传入expression.In的第二个参数位置
修改后的完整代码:
func Find(colors []string) ([]Trip, error) { db := database.GetClient() // 把字符串列表转换为ExpressionOperand切片 var operands []expression.ExpressionOperand for _, color := range colors { operands = append(operands, expression.Value(color)) } // 用可变参数展开传入In表达式 filt := expression.In(expression.Name("color"), operands...) expr, err := expression.NewBuilder().WithFilter(filt).Build() if err != nil { fmt.Println(err) return nil, err } params := &dynamodb.ScanInput{ ExpressionAttributeNames: expr.Names(), ExpressionAttributeValues: expr.Values(), FilterExpression: expr.Filter(), TableName: aws.String("Test"), } resp, err := db.Scan(context.TODO(), params) // 补充解析resp为[]Trip的逻辑 // ... return trips, err }
原写法问题说明
你之前尝试的expression.In(expression.Name("color"), expression.Value(colors))会把整个colors切片作为单个值传入IN表达式,不符合DynamoDB IN操作符需要多个独立值的语法要求,因此必须逐个转换为expression.Value后再传入。
内容的提问来源于stack exchange,提问作者Dinuksha
相关产品推荐
相关产品推荐

