登录
首页 >  Golang >  Go问答

使用 aws-sdk-go-v2 将多个值传递给 DynamoDB 的 expression.in() 方法

来源:stackoverflow

时间:2024-02-05 22:42:25 178浏览 收藏

golang学习网今天将给大家带来《使用 aws-sdk-go-v2 将多个值传递给 DynamoDB 的 expression.in() 方法》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我正在尝试将值列表传递给 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 := 表达式.in(表达式.name("颜色"),表达式.值(颜色))

我怎样才能实现这个目标?


正确答案


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

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)
}

本篇关于《使用 aws-sdk-go-v2 将多个值传递给 DynamoDB 的 expression.in() 方法》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>