将多个值传递给expression.inDynamoDB的aws-sdk-go-v2的www.example.com()

svmlkihl  于 2023-06-19  发布在  Go
关注(0)|答案(1)|浏览(88)

我试图传递一个值列表到aws-sdk-go-v2中的'IN'表达式,但我不知道如何动态地执行它。
这就是现在的样子。

func Find(colors []string) ([]Trip, error) {
    db := database.GetClient()

    filt := expression.In(
        expression.Name("color"),
        expression.Value(colors[0]),
        expression.Value(colors[1]),
    )

    expr, err := expression.NewBuilder().WithFilter(filt).Build()
    if err != nil {
        fmt.Println(err)
    }
    params := &dynamodb.ScanInput{
        ExpressionAttributeNames:  expr.Names(),
        ExpressionAttributeValues: expr.Values(),
        FilterExpression:          expr.Filter(),
        TableName:                 aws.String("Test"),
    }
    resp, err := db.Scan(context.TODO(), params)
}

我想使列表值动态,而不使用其索引访问。像下面这样
filt := expression.In(expression.Name("color"),expression.Value(colors))
我如何才能做到这一点?

goqiplq2

goqiplq21#

请参见将参数传递给...语言规范中的参数。

package main

import (
    "fmt"

    "github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression"
)

func main() {
    colors := []string{"red", "blue", "green"}

    if len(colors) == 0 {
        panic("colors should not be empty")
    }

    values := make([]expression.OperandBuilder, len(colors))
    for i, c := range colors {
        values[i] = expression.Value(c)
    }

    filter := expression.In(
        expression.Name("color"),
        values[0],
        values[1:]...,
    )

    fmt.Println(filter)
}

相关问题