You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在aws-sdk-go-v2的DynamoDB中动态给expression.In()传多值?

在aws-sdk-go-v2中给DynamoDB IN表达式动态传值的实现方法

要实现动态传入列表值到IN表达式,你需要将字符串列表转换为expression.ExpressionOperand类型的切片,再通过可变参数展开传递给expression.In函数,具体步骤如下:

  1. 遍历字符串列表,将每个元素转换为expression.Value类型,存入切片
  2. 通过**可变参数展开符...**将切片传入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 16:05:06