Go语言 如何将值从可变参数传递给func中的可变参数

ovfsdjhp  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(127)

SQL库func QueryContext为where子句接受可变参数。我想创建一个helper函数,它接受可变参数并将其发送给QueryContext调用。
下面是我的代码片段:

func GenericDBSelect(ctx context.Context, qry string, params ...string) (*sql.Rows, error) {
    // format the connectstr
    db, err := sql.Open("mysql", connectstr)

    if err != nil || db == nil {
        msg := "could not get db connection. Is DB available?"
        return nil, fmt.Errorf(msg)
    }

    rows, err := db.QueryContext(ctx, qry, params)

    if err != nil {
        msg := fmt.Sprintf("Could not prep query = %v, params = %v. Error = %v ", qry, params, err)
    
        return nil, fmt.Errorf(msg)
    }

    return rows, err
}

字符串
我这样称呼它:

rows, err := GenericDBSelect(ctx, qry, param1, param2)


当我运行这段代码时,它会抛出以下错误:
SQL:converting argument $1 type:不支持的类型[]string,字符串的一个片段
问题似乎是GenericDBSelect中的参数被接收为[]string而不是... string。

6tr1vspr

6tr1vspr1#

进行以下两项更改:

  • 声明GenericDBSelect以采用与QueryContext相同类型的可变参数。这使得params可以在不进行转换的情况下通过。
func GenericDBSelect(ctx context.Context, 
       qry string, params ...any) (*sql.Rows, error) {

字符串

  • 使用...语法将可变参数传递给QueryContext:
rows, err := db.QueryContext(ctx, qry, params...)


请参阅将参数传递给...的双曲余弦值。

相关问题